当前位置: 首页 > 面试题库 >

如何基于服务器响应而不是HTTP 500触发jquery.ajax()错误回调?

晏晨朗
2023-03-14
问题内容

通过使用jquery ajax函数,我可以做类似的事情:

$.ajax({

  url: url,
  type: 'GET',
  async: true,
  dataType: 'json',
  data: data,

 success: function(data) {

     //Handle server response here

  },

 error: function(xhr, status, error){

    //Handle failure here

 }

});

根据以上代码,我有两个问题要问:

  1. 何时error调用jquery.ajax()回调???

  2. 如果服务器响应给我一个带有字符串消息“ 存在错误 ” 的json对象,该怎么办。这意味着请求仍然成功发送,但是我得到了服务器响应{message: "There is an error"}

我认为无论响应什么字符串值服务器,如果客户端得到服务器的响应,无论如何都会触发 jquery.ajax() success回调。

我想问一下服务器是否专门向我返回了带有字符串值的JSON对象{message: 'There is an error'},服务器是否可以执行某些操作,以便可以在 jquery.ajax() error回调而不是success回调中处理此响应?


问题答案:

当服务器的响应与您的期望不符时,将执行错误回调。因此,例如在这种情况下:

  • 收到HTTP 404/500或任何其他HTTP错误消息
  • 接收到错误类型的数据(即,您期望使用JSON,但又收到了其他内容)。

根据您的情况,数据是正确的(这是JSON消息)。如果要基于接收到的数据的值手动触发错误回调,则可以非常简单地进行。只需将匿名回调更改为命名函数即可。

function handleError(xhr, status, error){

    //Handle failure here

 }

$.ajax({

  url: url,
  type: 'GET',
  async: true,
  dataType: 'json',
  data: data,

 success: function(data) {
     if (whatever) {
         handleError(xhr, status, ''); // manually trigger callback
     }
     //Handle server response here

  },

 error: handleError
});


 类似资料:
  • 我正在使用windows,当socket.io发出事件时,命令提示符显示以下内容: 我想不出问题出在哪里,我做错了什么?

  • 问题内容: 我正在为进行AJAX调用的JavaScript写一些QUnit测试。 为了隔离,我重写以将AJAX调用的参数数组写入变量。这可以测试方法如何使用AJAX函数,但是我很难测试 从位于http://api.jquery.com/load/的文档中: 当检测到成功的响应时(即,当textStatus为“成功”或“未修改”时),. load()将匹配元素的HTML内容设置为返回的数据。 因此,

  • 问题内容: 这从未发生过。通常它会显示错误,但是现在它只给我500个内部服务器错误。当然,在显示错误之前,它是不同的服务器。现在,我在新服务器上(我具有完整的root用户,因此,如果需要在php.ini中的某个位置进行配置,则可以。)或者也许与Apache兼容? 我一直在忍受它,只是将文件传输到我的其他服务器上并在其中运行以查找错误,但这变得太乏味了。有没有办法来解决这个问题? 问题答案: 检查,

  • 问题内容: 我有一个新编码的GWT / GAE应用,该应用在客户端上使用RequestFactory和Editors,在背面使用自定义的Objectify DAO服务。 flush()然后persist()路径在成功时可以正常工作。客户端JSR 303也可以正常工作。 我的问题是如何触发服务器警告/错误并处理UI更新? 我在http://turbomanage.wordpress.com/2010

  • 我试图通过ajax调用从表中获取数据。但我得到的响应是“500内部服务器错误”。 ajax调用的脚本如下所示 方法中调用。PHP如下所示 add_action('wp_ajax_nopriv_getsections','getsections');add_action('wp_ajax_getsections','getsections');