2013-08-05 248 views
0

我有我的本地测试驱动器上运行以下脚本。它导入一个JSON文件并构建一个网页,但由于某种原因,在处理数据时出现错误。没有数据显示...JSONP ajax回调失败

但是,每当我使用(相同)数据硬编码,我得到我想要的结果。因此,这让我觉得它是与我办理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

如果您登录错误回调,您是否在控制台中看到任何内容?是“游戏支付”的错字?你在浏览器的网络标签中看到了什么? –

+0

你能告诉我们'games-payed.js'的样子吗?关于_payed_:http://english.stackexchange.com/questions/92547/paid-vs-payed tldr;使用**付费** – Halcyon

+0

关于“付费”的命名,这是我们从客户端获得的服务,所以我无法控制命名:)我添加了JSON文件的片段。 – Michiel

回答

2

在你的榜样,我看到你包裹里jsonp1您的JSON数据。我想这是一个固定的名字。如果是这样的话,试试这个:

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添加

    • 指定您的函数名“?callback”字符串到URL或尝试使用“=?”进行转化。