【问题标题】:Json RPC request via jquery getJSON通过 jquery getJSON 的 Json RPC 请求
【发布时间】:2012-04-09 12:52:51
【问题描述】:

我正在尝试使用 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 发送请求?那我该怎么做呢?

【问题讨论】:

  • 任何你问这个问题的原因都没有在这里关闭/重写你的其他(重复)问题:http://stackoverflow.com/questions/9988733/json-rpc-error-32600 和这里:http://stackoverflow.com/questions/9871972/json-rpc-string
  • 添加 jQuery 标签,移除 JSONP 标签。

标签: php jquery json getjson json-rpc


【解决方案1】:

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。

【讨论】:

    【解决方案2】:

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

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

    您的示例消息的具体问题?

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

    网络服务是否真的需要?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 消息)。

    【讨论】:

      猜你喜欢
      • 2015-11-03
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      相关资源
      最近更新 更多