我有一个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).");");