如何从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选项是否会改变有关此策略的内容。