小编典典

jQuery,JSON和Apache问题

ajax

我有一个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。

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


阅读 307

收藏
2020-07-26

共1个答案

小编典典

我非常确定,要进行像这样的跨域调用,您必须有一个回调,这是执行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).");");
2020-07-26