我正在尝试使用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 发送请求?那我应该怎么做呢?
名思义,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。
该特定错误消息应该告诉您消息信封根据 JSON-RPC 2.0 规范无效,或者 JSON 本身存在解析错误。
遗憾的是,在实践中,许多服务在更广泛的各种情况下返回此错误。(例如:缺少身份验证令牌等)
您的示例消息有具体问题?
网络服务是否接受GET
请求?(即:这应该是一个POST
吗?
Web 服务是否真的需要 ?jsoncallback=?
位?这通常是针对 JSONP 请求而不是 JSON-RPC。该服务返回一个真实的 JSON-RPC 错误状态,所以如果它需要该 GET 参数,并且(取决于 Web 服务配置)可能会被解释为信封的一部分,这将使它成为无效的 JSON-RPC 请求,我会感到非常惊讶!
merchant_check
是否将一个或多个事务数组作为其唯一参数?如果不是,那么您的语法错误params
.有些服务希望params
成为Array
,有些服务希望它是Object
。请查阅 SMD/文档以确定哪种情况。
该服务可能需要text/json
(或其他内容)作为请求的mime-type
。
推荐方法:
为了避免这些问题,您可能应该首先使用专门构建的 JSON-RPC 库,例如 Dojo 工具包中提供的库,并使用 Web 服务发布的 SMD(如果有)。(我建议不要手动构造 JSON-RPC 消息)。