簡體   English   中英

如何讓JQuery接受JSON回復?

[英]How to get JQuery to accept a JSON reply?

這是一些簡單的Javascript:

(function($){
    var ajax_callback = function(data) { window.location.hash = data.h1; };
    $('.clickable').live('click', function() { 
             $.post('server.fcgi', {}, ajax_callback, 'json');
         }
    );
})(jQuery);

服務器是c ++二進制文件(是的,我知道),它通過fast_cgi吐出字符串: {"h1":"newhash"}

預期的行為是URL應該更改。 相反,沒有任何反應,Firebug抱怨'數據'是“空”! 任何幫助將不勝感激!

將。

當以下代碼輸入“ajax_callback”時,它表示“data”為“null”! 但是服務器是一個c ++二進制文件,它被確認返回JSON字符串{"h1":"newhash"} 任何人都知道為什么JQuery在調用ajax_callback時似乎無法接受JSON數據?

我確實遇到過與使用$ .POST()時提到的類似問題。 如果您使用jquery $ .post方法,有兩件事。 您需要在定義的數據類型(“JSON”)之前添加一個額外的括號,如下所示。 我不知道為什么但它有效,它會返回數據。

$.post('server.fcgi', {}, ajax_callback,{}, 'json');

第二件事是你需要在回調函數中使用$ .parseJSON(data)來解析JSON數據。

還有一件事要確保獲取JSON的url,頁面文檔類型應該在頭文件中定義為JSON。

我在下面給出了一個例子。

$.post("url/path/here/to/json", {}, function(data){

    if(data){ // just in case the called program had a problem
         var obj =  $.parseJSON(data);
        .... do everything else using the Obj->         
    }
},{},"json");

這會奏效。

但是,我建議您使用另一個專門為JSON實現的Jquery函數,即調用它

$.getJSON();

以下是獲取更多信息網址

我建議你使用以下方法而不是你描述的方法。

$(document).ready(function(){

    $('.clickable').live('click', function() { 
             $.getJSON('server.fcgi', function(data){
                         window.location.hash = data.h1;
              });
         }
    );
});

確保服務器還在有效負載之前返回正確的HTTP標頭。 例如:

HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: ...
...

{"h1":"bla"}

根據你的描述,如果它只是printf("{\\"h1\\":\\"bla\\"}"); ,我就無法弄清楚printf("{\\"h1\\":\\"bla\\"}"); 或不。

要檢查實際結果,請使用命令行工具,如HEADGETwgetcurl甚至nc 如果您無法使用其中一個,您可能會從Firebug等的Net面板中獲得一些線索。

可能不是你想聽到的答案,但我假設你正在使用jQuery 1.4.2? 我注意到這確實在1.3.2中按預期工作,因此您可能需要考慮使用它。 :(

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM