Php 通过jquery getJSON的Json RPC请求

Php 通过jquery getJSON的Json RPC请求,php,jquery,json,getjson,json-rpc,Php,Jquery,Json,Getjson,Json Rpc,我正在尝试使用jquery getJSON方法将json rpc请求发送到远程服务器。这是我的密码: json_string=JSON.stringify(obj); var jqxhr = $.getJSON("https://91.199.226.106/ssljson.php?jsoncallback=?", json_string, function(data){ alert("aaaaaa"); }); jqxhr.error(function() { alert("error

我正在尝试使用jquery getJSON方法将json rpc请求发送到远程服务器。这是我的密码:

json_string=JSON.stringify(obj);
var jqxhr = $.getJSON("https://91.199.226.106/ssljson.php?jsoncallback=?", json_string, function(data){
    alert("aaaaaa");
});
jqxhr.error(function() { alert("error"); })
以下是我的json rpc字符串示例:

{"jsonrpc":"2.0","method":"merchant_check","params":[{"hostID":150999,"orderID":116,"amount":"150","currency":"051","mid":15001038,"tid":15531038,"mtpass":"12345","trxnDetails":""}],"id":116}
下面是我得到的错误:

{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"Invalid JSON-RPC 2.0 request error (-32600)"}}

我不明白问题出在哪里。我做错什么了吗?也许我需要用php而不是jquery发送请求?那么我应该怎么做呢?

该特定错误消息应该告诉您,根据JSON-RPC 2.0规范,消息信封无效,或者JSON本身存在解析错误

不幸的是,在实践中,许多服务在更广泛的情况下返回此错误。(例如:缺少身份验证令牌等)

示例消息的具体问题

web服务是否接受
GET
请求?(即:这应该是一个
帖子吗?

web服务实际上是否需要
?jsoncallback=?
位?这通常用于JSONP请求,而不是JSON-RPC。该服务正在返回一个真正的JSON-RPC错误状态,因此如果它需要GET参数,并且(取决于web服务配置)可能会被解释为信封的一部分,这将使其成为无效的JSON-RPC请求,我会非常惊讶

merchant\u check
是否将一个或多个交易的数组作为其唯一参数?如果不是,则说明
params
的语法错误。有些服务希望
参数
成为
数组
,有些服务希望它成为
对象
。请参阅SMD/文件以确定是哪种情况

服务可能需要
text/json
(或其他内容)作为请求的
mime类型

建议的做法:


为了避免这些问题,您可能应该首先使用专门构建的JSON-RPC库,如Dojo toolkit中提供的库,并使用web服务发布的SMD(如果有)。(我建议不要手动构造JSON-RPC消息)。

该特定错误消息应该告诉您,根据JSON-RPC 2.0规范,消息信封无效,或者JSON本身存在解析错误

不幸的是,在实践中,许多服务在更广泛的情况下返回此错误。(例如:缺少身份验证令牌等)

示例消息的具体问题

web服务是否接受
GET
请求?(即:这应该是一个
帖子吗?

web服务实际上是否需要
?jsoncallback=?
位?这通常用于JSONP请求,而不是JSON-RPC。该服务正在返回一个真正的JSON-RPC错误状态,因此如果它需要GET参数,并且(取决于web服务配置)可能会被解释为信封的一部分,这将使其成为无效的JSON-RPC请求,我会非常惊讶

merchant\u check
是否将一个或多个交易的数组作为其唯一参数?如果不是,则说明
params
的语法错误。有些服务希望
参数
成为
数组
,有些服务希望它成为
对象
。请参阅SMD/文件以确定是哪种情况

服务可能需要
text/json
(或其他内容)作为请求的
mime类型

建议的做法:


为了避免这些问题,您可能应该首先使用专门构建的JSON-RPC库,如Dojo toolkit中提供的库,并使用web服务发布的SMD(如果有)。(我建议不要手动构建JSON-RPC消息)。

名称所示的
getJSON
将发送
GET
请求,如果您想使用JSON-RPC,则需要使用POST,如:

var json_string = JSON.stringify(obj);
$.post('https://91.199.226.106/ssljson.php', json_string, function(response) {
   // process response
}, 'json');

但这仅在页面位于同一服务器上时有效,除非您使用CORS。

名称所示的
getJSON
将发送
GET
请求,如果您想使用JSON-RPC,则需要使用POST,如:

var json_string = JSON.stringify(obj);
$.post('https://91.199.226.106/ssljson.php', json_string, function(response) {
   // process response
}, 'json');

但这仅在您的页面位于同一服务器上时有效,除非您使用CORS。

您提出此问题的任何原因都没有关闭/重新编写其他问题(重复)这里的问题:
http://stackoverflow.com/questions/9988733/json-rpc-error-32600
这里:
http://stackoverflow.com/questions/9871972/json-rpc-string
添加了jQuery标记,删除了JSONP标记。您问这个问题的任何原因都没有关闭/重新编写另一个(重复)这里的问题:
http://stackoverflow.com/questions/9988733/json-rpc-error-32600
这里:
http://stackoverflow.com/questions/9871972/json-rpc-string
添加了jQuery标记,删除了JSONP标记。