【问题标题】:How to detect jQuery $.get failure?如何检测 jQuery $.get 失败?
【发布时间】:2011-02-19 00:14:00
【问题描述】:

我是 jQuery 初学者。我正在尝试使用 $.get() 编写一个非常简单的代码。 official documentation 说:

如果带有 jQ​​uery.get() 的请求返回错误代码,它将静默失败,除非脚本还调用了全局 .ajaxError() 方法或。

从 jQuery 1.5 开始,jqXHR 对象的 .error() 方法 jQuery.get() 返回的也可用于错误处理。

所以,如果一切顺利,我的成功回调函数将被调用。但是,如果请求失败,我想获取 HTTP 代码:404、502 等,并为用户制定有意义的错误消息。

但是,由于这是一个异步调用,我可以想象我可能有几个未完成的调用。 .ajaxError() 如何知道它对应于哪个请求?也许使用jQuery.get()返回的jqXHR对象的.error()方法会更好?

我正在寻找一个非常简单的代码示例。也许成功例程会调用 Alert("Page found"),而失败例程会检查 404 并执行 Alert("Page not found")。

更新

以下页面非常有帮助:http://api.jquery.com/jQuery.get/

【问题讨论】:

    标签: jquery


    【解决方案1】:

    您是对的,您可以使用 jQuery 1.5 的新 jqXHR 将错误处理程序分配给 $.get() 请求。你可以这样做:

    var request = $.get('/path/to/resource.ext');
    
    request.success(function(result) {
      console.log(result);
    });
    
    request.error(function(jqXHR, textStatus, errorThrown) {
      if (textStatus == 'timeout')
        console.log('The server is not responding');
    
      if (textStatus == 'error')
        console.log(errorThrown);
    
      // Etc
    });
    

    您还可以将处理程序直接链接到调用:

    $.get('/path/to/resource.ext')
         .success(function(result) { })
         .error(function(jqXHR, textStatus, errorThrown) { });
    

    我更喜欢前者以减少代码的纠结,但两者是等价的。

    【讨论】:

    • +1 感谢您的帮助。但是,如果我有多个并行活动的请求怎么办?如何判断哪个错误属于哪个?
    • 传递给错误处理程序的 jqXHR 对象将包含有关引发错误的原始请求的信息。根据您的服务器端实现,errorThrown 还将包含有关问题所在的更多详细信息。
    • 如果您将 JavaScript 对象作为 $.get() 的第二个参数传递,它将对该数据进行 URL 编码并将其附加到 URL。对于您的示例,您将使用 $.get('/path/to/resource.ext', { search: 'pizza' }); 添加参数。
    • jQuery 现在使用 .done 和 .fail 而不是 .success 和 .error,它们都已被弃用但可能会工作一段时间。 api.jquery.com/jQuery.get
    • @Jazzepi 是对的,但也有这个替代方案 stackoverflow.com/questions/41169385/…
    【解决方案2】:

    从 jQuery 3.0 开始,.success().error() 已弃用。
    您可以改用.done().fail()

    $.get( url )
        .done(function( data, textStatus, jqXHR ) {
            console.log(data);
        })
        .fail(function( jqXHR, textStatus, errorThrown ) {
            console.log(jqXHR);
            console.log(textStatus);
            console.log(errorThrown );
        });
    

    来源:https://api.jquery.com/jQuery.ajax/

    【讨论】:

      【解决方案3】:

      .get() 只是.ajax() 的同义词,预设了许多选项。使用ajax() 获取全部选项,包括error 回调。

      $.ajax({
      type: "GET",
      url: "test.htm",
      error: function(xhr, statusText) { alert("Error: "+statusText); },
      success: function(msg){ alert( "Success: " + msg ); }
      }
      );
      

      【讨论】:

      • +1这表明我是多么的n00b,我不知道。我会试试看,然后回复你。谢谢。
      • 顺便说一句,我如何将 CGI 参数传递给 URL。例如 google.com?serach="pizza"
      • 传输失败的 Ajax 请求将静默失败(只有在解析您的请求时出错,但它被正确接收时才会调用错误)
      猜你喜欢
      • 2011-09-13
      • 1970-01-01
      • 2013-08-26
      • 2015-06-19
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 2011-12-05
      • 1970-01-01
      相关资源
      最近更新 更多