繁体   English   中英

JSONP ajax回调失败

[英]JSONP ajax callback failing

我在本地测试驱动器上运行了以下脚本。 它导入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"
        }

    ]
});

在您的示例中,我看到您将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附加到url的末尾。 由于回调参数,服务器端的代码可以使用相同的函数名称来调用浏览器上的回调。

在您的情况下,您使用的是固定函数名称(jsonp1),因此您必须:

  • 使用jsonpCallback="jsonp1"显式指定函数名称
  • 设置jsonp = false以防止jQuery将“?callback”字符串添加到URL或尝试使用“=?” 转型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM