如何从jQuery中的外部URL获取数据?
var resturl = "http://example.com"; cj.getJSON( resturl + "&callback=?", function(data) { console.log( data ); } );
我的回调函数永远不会被调用。 有任何想法吗?
这里有两件事:
首先你的URL添加应该是"?callback=?"
因为没有其他查询字符串,或者使用带有jsonp
数据类型的完整$.ajax()
调用,所以它会根据需要添加查询字符串,如下所示:
$.ajax({ url: resturl, dataType: 'jsonp', success: function(data){ console.log( data ); } });
其次,您将要支持JSONP的域名。
请记住,jquery将作为函数执行回调,因此您必须确保服务器返回的JSON被包装为回调。
这是一个非常简单的工作示例。
使用Javascript:
var myURL = "http://www.someserver.com/somegreatapplication.php?callback=?"; $.getJSON( myURL, function(data) { $("#somediv").html( data.htmlCode); });
somegreatapplication.php
This worked!"; // 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":"This worked!"});
然后运行,然后在getJSON(… function(){})中提供对象;
所有这一切当然都假定您正在控制通信的两端。 如果你不这样做,那么你需要确保另一端给你正确的JSONP输出(你可能需要使用一个特别命名的回调,如果他们强制这样做)
只要服务器端发送数据并使用JSONP,这应该可以工作
var resturl = "http://example.com"; $.getJSON(resturl,{"callback":"?"},function(data, textStatus){ console.log(data)});
根据文档,回调仅在成功时执行。 因此,一般来说,请求可能会失败。 构造的URL也不包含有效的查询字符串。 你用一个?
启动查询字符串?
,但您的URL只包含一个&
,表示其他查询字符串参数:
callback(data,textStatus)如果请求成功则执行的回调函数。
http://api.jquery.com/jQuery.getJSON/
但我不确定额外的JSONP选项是否会改变有关此策略的内容。