繁体   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