我有一个jQuery JSON请求,该请求从另一台服务器(例如foo.com)加载一些JSON:

$.getJSON("http://foo.com/json.php",function(data) { alert(data); });


但是我收到的数据为空。这不是跨域问题,我尝试了以下操作:

$.getJSON("http://twitter.com/users/usejquery.json?callback=?",
    function(data) { alert(data); });


并收到不错的JSON对象。因此,我认为后端Apache 2.2.14存在问题。这是从服务器发送的HTTP标头:

Date: Sun, 07 Mar 2010 16:08:38 GMT
Server: Apache/2.2.14 (CentOS)
X-Powered-By: PHP/5.3.1
Content-Length: 2
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8


标头在每种情况下都是相同的:常规HTTP请求或AJAX。但是我收到的AJAX空内容以及带有浏览器请求的普通JSON。我将Firebug用于测试,将PHP5用于形成JSON。

有人有什么想法吗?
谢谢!

最佳答案

我非常确定,要进行这样的跨域调用,您必须有一个回调,这是执行JSONP所需要的。

这是有关jsonp http://www.insideria.com/2009/03/what-in-the-heck-is-jsonp-and.html的更多信息

为了使jsonp正常工作,您必须为服务器提供一个回调,以便在其中包装json字符串。例如:

$.getJSON("http://foo.com/json.php?callback=?", function(data){});


在这里,一个回调函数由jquery生成并传递到请求中,因此它类似于:

http://foo.com/json.php?callback=generatedFunction


那么服务器返回的内容应该是:

generatedFunction("{key:value, key2:value2}");


该函数中的参数是实际的json字符串。

在PHP中返回此结果将是这样的:

$callback = $_GET['callback'];
print($callback."(".json_encode($theobject).");");

09-18 21:10