2012-04-09 81 views
1

我想用jquery getJSON方法發送json-rpc請求到遠程服務器。這裏是我的代碼:JSON RPC請求通過jquery getJSON

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?那我應該怎麼做呢?

+0

任何你沒有關閉/重寫你的其他(重複)問題在這裏問這個問題的原因:'http:// stackoverflow.com/questions/9988733/json-rpc-error-32600' and here:' http:// stackoverflow.com/questions/9871972/json-rpc-string' – 2012-04-10 02:35:23

+0

增加了jQuery標籤,刪除了JSONP標籤。 – 2012-04-10 05:32:26

回答

1

getJSON正如其名說,如果你想使用JSON-RPC,您需要使用POST喜歡將發送GET要求:

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

但如果你的網頁是在同一臺服務器上只會工作,除非你使用CORS。

0

該特定的錯誤消息是假定告訴您,每個JSON-RPC 2.0規範的郵件信封無效,或者JSON本身存在解析錯誤。

不幸的是,在實踐中,許多服務在更廣泛的情況下返回這個錯誤。 (例如:缺少身份驗證令牌等)

示例消息的具體問題?

網絡服務是否接受GET請求? (即:應該是POST而不是?)

Web服務實際上是否需要?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消息)。

+0

增加了關於'POST'的位 – 2012-04-10 03:33:12