这是一些简单的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数据?
答案 0 :(得分:2)
我确实遇到过与使用$ .POST()时提到的类似问题。 如果您使用jquery $ .post方法,有两件事。您需要在定义的数据类型(“JSON”)之前添加一个额外的括号,如下所示。我不知道为什么但它有效,它会返回数据。
$.post('server.fcgi', {}, ajax_callback,{}, 'json');
第二件事是你需要使用回调函数旁边的$ .parseJSON(数据)来解析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;
});
}
);
});
答案 1 :(得分:0)
确保服务器还在有效负载之前返回正确的HTTP标头。 E.g:
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: ...
...
{"h1":"bla"}
根据您的描述,如果所有内容都是printf("{\"h1\":\"bla\"}");
,我就无法理解。
要检查实际结果,请使用命令行工具,例如HEAD
,GET
,wget
,curl
,甚至nc
。如果您无法使用其中一个,您可能会从Firebug等的Net面板中获得一些线索。
答案 2 :(得分:0)
可能不是你想听的答案,但我假设你正在使用jQuery 1.4.2?我注意到这确实在1.3.2中按预期工作,因此您可能需要考虑使用它。 :(