Json RPC请求通过jquery getJSON

时间:2012-04-09 12:52:51

标签: 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"); })

这是我的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发送请求?那我该怎么做呢?

2 个答案:

答案 0 :(得分:1)

getJSON如名称所示,如果您想使用JSON-RPC,则会发送GET请求,如下所示:

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

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

答案 1 :(得分:0)

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

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

示例消息的具体问题?

网络服务是否接受GET次请求? (即:这应该是POST而不是?)

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

merchant_check是否将一个或多个事务的数组作为唯一参数?如果没有,那么params的语法错误。有些服务希望paramsArray,有些服务希望它为Object。请查阅SMD /文档以确定是哪种情况。

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

推荐方法

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