如何使用jQuery

时间:2015-05-04 11:12:12

标签: javascript jquery ajax

我正在尝试向服务器发出JSONP请求。这是我的代码:

$.ajax({
  type: 'GET',
  url: myURL,
  async: false,
  crossDomain: true,
  dataType: 'jsonp',
  jsonpCallback: 'jsonCallback',
  headers: { 
    'Accept': 'application/json', //this is required by the server
    'key': key   
  },
  success: function() {
    alert('1');
  },
  error: function() {
    alert('2');
  },
  complete: function(){
    alert('3');
  }
});//code indentation

当我运行代码时,它会出错。但是,如果我在Chrome中打开开发人员工具(ctrl + shift + I),我可以在“网络”下看到请求。单击它会显示正确的响应(并显示请求已被接受)。

道歉是否有一个非常明显的解决方案(我已经尝试过搜索,但没有运气),但在这一点上我很好,真的很困惑。任何帮助都会非常感激。

:: EDIT ::

将错误功能更改为:

error: function() {
  console.log('error', arguments);
},

返回消息“jsonCallback未被调用”感谢下面的Aaron Digulla。

服务器的响应是JSON,而不是JSONP(使用JSONlint检查)

3 个答案:

答案 0 :(得分:1)

成功函数有参数,你可以从该参数得到响应文本。

$.ajax({
  type: 'GET',
  url: myURL,
  async: false,
  crossDomain: true,
  dataType: 'jsonp',
  jsonpCallback: 'jsonCallback',
  headers: { 
    'Accept': 'application/json', //this is required by the server
    'key': key 
  },
  success: function(response) {
    alert(response);
    alert('1');
  },
  error: function() {
    alert('2');
  },
  complete: function(){
    alert('3');
  }
});

答案 1 :(得分:0)

由于jsonp请求的性质,你无法为{jonp}请求设​​置async: false,添加脚本标记来处理响应方法。

答案 2 :(得分:0)

 dataType: 'jsonp

正如你所提到的,你期望从服务器返回的数据类型是jsonp,但可能是你的服务器将返回任何其他格式而不是jsonp ..所以检查你的服务器返回的响应类型浏览器控制台中的网络...如果它不是jsonp格式,请更改您的响应返回类型....