jQuery + JSONP返回数据为空?

问题描述:

我需要访问一个子域的数据我一直在试图使用jQuery支持的JSONP。我在子域上访问的数据是一个静态(重新生成).json文件(http://www.example.com/data.jsonjQuery + JSONP返回数据为空?

我遇到了“Invalid Label Error”错误,并意识到需要将数据包装在括号中并使用?callback =?

http://www.example.com/data.json?callback=? 

({ 
"items": [ 
{ 
    "url": "http://www.example.com", 
    "id": "2981", 
     "title": "title", 
    "description": "lorem ipsum sit dolor", 
    "start": "00:10:00", 
    "end": "00:20:00" 
} 
}) 


$.getJSON(url, function(data){ 
console.log("json: " + data); 
}); 

结束语数据()担任我现在可以看到在Firebug净标签返回的数据,但$ .getJSON不返回任何东西,我不认为它触发。

我错过了什么?服务器端需要做些什么吗?

谢谢!

+0

当你说它不返回任何东西时,你的意思是什么? “数据”参数是否为空? – Pointy 2010-03-09 13:38:03

您要返回的数据不是JSON-P。

维基百科有一个体面的explanation of what JSON-P should look like。有a jQuery specific guide to accepting JSON-P

+0

啊我明白你的意思了:是的,@Gregory,你的服务器返回普通的JSON,并没有注意“回调”参数。 – Pointy 2010-03-09 13:42:13

您从HTTP请求返回的代码正在被浏览器执行。

浏览器执行得很好,但它不知道把它放在哪里,因为它没有分配给任何东西。

幸运的是,jQuery足够智能,让我们使用一个参数(回调= )供您在代码中使用。

您的服务器端语言必须添加回调参数,使您的JSON响应看起来像一个JavaScript函数调用:

<?php echo $_GET["callback"]?>({ 
"items": [ 
{ 
    "url": "http://www.example.com", 
    "id": "2981", 
     "title": "title", 
    "description": "lorem ipsum sit dolor", 
    "start": "00:10:00", 
    "end": "00:20:00" 
} 
}) 
+0

那么在回答之前是否会添加“回调”? – Gregory 2010-03-09 14:17:05

如果您尝试验证的http://jsonlint.com/你看到有一些例如您的JSON数据错误。

您是通过框架还是手动生成JSON数据?

手动JSON数据生成容易出错。

我希望能帮助你解决你的错误。

马丁