我在本地测试驱动器上运行了以下脚本。它导入JSON文件并构建网页,但由于某种原因,处理数据时出错。没有数据显示......
但每当我使用(相同的)数据硬编码时,我得到我想要的结果。所以这让我觉得它与我处理JSON导入的方式有关...
这是我的AJAX回调:
getGames: function(fn) {
$.ajax({
type: "GET",
url: App.Config('webserviceurl')+'games-payed.js',
dataType: "jsonp",
success: function (data) {
console.log('streets', data);
if(fn){
fn(data);
}
},
error: function (msg) {
if(fn){
fn({status:400});
}
}
});
}
此代码无效,我的控制台也没有出现任何错误......
当我加载硬编码的数据时,它完美地运行:
getGames: function(fn) {
var games = App.Config('dummyGames');
if(fn){
fn(games);
}
}
我的AJAX回调有问题吗?
修改 JSON文件如下所示:
jsonp1({
"status": "200",
"data": [
{
"id": "1",
"title": "Title 1",
"publishDate": "2013-03-27T15:25:53.430Z",
"thumbnail": "images/thumbs/image_game1.png",
"html5": "http://mysite.com/index.html"
},
{
"id": "2",
"title": "Title 2",
"publishDate": "2013-03-20T15:25:53.430Z",
"thumbnail": "images/thumbs/image_game2.png",
"html5": "http://mysite.com/index.html"
},
{
"id": "3",
"title": "Title 3",
"publishDate": "2013-03-18T15:25:53.430Z",
"thumbnail": "images/thumbs/image_game3.png",
"html5": "http://mysite.com/index.html"
}
]
});
答案 0 :(得分:2)
在您的示例中,我看到您将json数据包装在jsonp1
中。我想这是一个固定的名字。如果是这种情况,请试试这个:
getGames: function(fn) {
$.ajax({
type: "GET",
url: App.Config('webserviceurl')+'games-payed.js',
jsonp: false,
jsonpCallback:"jsonp1",
dataType: "jsonp",
success: function (data) {
console.log('streets', data);
if(fn){
fn(data);
}
},
error: function (msg) {
if(fn){
fn({status:400});
}
}
});
}
注意jsonpCallback:"jsonp1"
和jsonp: false
。原因是:默认情况下,jquery将自动并随机生成回调函数名称,并将?callback=generatedFunctionName
附加到您的网址末尾。由于回调参数,服务器端的代码可以使用相同的函数名称来调用浏览器上的回调。
在您的情况下,您使用的是修复函数名称(jsonp1),因此您必须:
jsonpCallback="jsonp1"
jsonp = false
以防止jQuery将“?回调”字符串添加到URL或尝试使用“=?”转型。