var resturl = "http://example.com";
cj.getJSON(
resturl + "&callback=?",
function(data)
{
console.log( data );
}
);
永远不会调用我的回调函数。有什么想法吗?
答案 0 :(得分:13)
这里有两件事:
首先,您的网址添加应为"?callback=?"
,因为没有其他查询字符串,或者使用jsonp
数据类型的完整$.ajax()
调用,因此会根据需要添加查询字符串,如下所示:
$.ajax({
url: resturl,
dataType: 'jsonp',
success: function(data){
console.log( data );
}
});
其次,您要支持的域名JSONP。
答案 1 :(得分:1)
请记住,jquery将作为函数执行回调,因此您必须确保服务器返回的JSON被包装为回调。
这是一个非常简单的工作示例。
<强>使用Javascript:强>
var myURL = "http://www.someserver.com/somegreatapplication.php?callback=?";
$.getJSON( myURL, function(data) {
$("#somediv").html( data.htmlCode);
});
<强> somegreatapplication.php 强>
<?php
$output['htmlCode'] = "<b>This worked!</b>";
// Properly format the jsonP response //
$json = json_encode( $output);
header("Content-type: application/json");
exit( $_GET['callback'] . ' (' . $json . ');' );
?>
请注意,PHP不会像您可能习惯的那样返回Raw JSON代码,但实际上会返回回调函数,包括JSON。 jQuery会将您的URL变成以下内容:
<强> http://www.someserver.com/somegreatapplication.php?callback=jsonp1283446768493&_=1283446768526 强>
然后你的PHP输出:
jsonp1283446768493({"menuHTML":"<b>This worked!</b>"});
运行,然后该对象在getJSON(... function(){})中可用;
所有这一切当然都假定您正在控制通信的两端。如果你不这样做,那么你需要确保另一端给你正确的JSONP输出(你可能需要使用一个特别命名的回调,如果他们强制这样做)
答案 2 :(得分:0)
只要服务器端发送数据并使用JSONP
,这就应该有效var resturl = "http://example.com";
$.getJSON(resturl,{"callback":"?"},function(data, textStatus){ console.log(data)});
答案 3 :(得分:0)
根据文档,回调仅在成功时执行。因此,一般的请求可能会失败。构造的URL实际上也不包含有效的查询字符串。您使用?
启动查询字符串,但您的网址只包含&
,表示其他查询字符串参数:
callback(data,textStatus)请求成功时执行的回调函数。
http://api.jquery.com/jQuery.getJSON/
但我不确定额外的JSONP选项是否会改变此政策。