如何在 jQuery 的 load() 方法中捕获错误

Posted

技术标签:

【中文标题】如何在 jQuery 的 load() 方法中捕获错误【英文标题】:How to catch error in jQuery's load() method 【发布时间】:2010-10-19 16:37:18 【问题描述】:

我正在使用 jQuery 的 .load() 方法在用户单击按钮时检索一些数据。

加载成功完成后,我在<div> 中显示结果。

问题是,有时load() 在检索数据时会出现错误。

如何在load() 中发现错误?

【问题讨论】:

这个问题是2009年的,所以请注意$.load: 在jQuery 3.0之前,事件处理套件也有一个名为.load()的方法。旧版本的 jQuery 根据传递给它的参数集确定要触发的方法。 【参考方案1】:

load() 提供回调。

回调。ajax请求完成时调用的函数(不一定成功)。

这就是它完成 IIRC 的方式。 (没有测试过)

$("#feeds").load("feeds.php", limit: 25, 
    function (responseText, textStatus, XMLHttpRequest) 
        // XMLHttpRequest.responseText has the error info you want.
        alert(XMLHttpRequest.responseText);
);

【讨论】:

函数的第一个参数是responseText。无需使用 XMLHttpRequest.responseText...【参考方案2】:

除了按照 Ólafur Waage 的建议将回调传递给 load() 函数之外,您还可以注册“全局”错误处理程序(对于页面上的所有 ajax 调用来说,全局的就是全局的)。

至少有两种方法可以注册全局 Ajax 错误处理程序:

只用ajaxError()注册错误处理程序:

$.ajaxError(function(event, request, settings) 
      alert("Oops!!");
);

或者,使用ajaxSetup() 同时设置错误处理程序和其他属性:

$.ajaxSetup(
    timeout: 5000,
    error: function(event, request, settings)
        alert("Oops!");
    
);

【讨论】:

我使用的是 jquery 3.5,它没有 $.ajaxError 功能,尽管它仍在文档中:api.jquery.com/ajaxError 从 jQuery 1.9 开始,它是 $(document).ajaxError 而不仅仅是 $.ajaxError【参考方案3】:

load() documentation.

只是关于如何发生加载错误的一点背景......

$("body").load("/someotherpath/feedsx.pxhp", limit: 25, 
    function (responseText, textStatus, req) 
        if (textStatus == "error") 
          return "oh noes!!!!";
        
);

编辑:根据 cmets 的要求添加了根路径以外的路径。

【讨论】:

感谢 altCongnito。它成功了!顺便说一句,我可以问另一个相关的问题吗?另一个问题是文件路径!我使用asp.net。我在母版页中编写 load() 代码。参数 Url 类似于 feedsx.aspx。当内容页面位于根文件夹下时它可以工作。但是如果内容页面位于其他子文件夹下则不起作用。帮助 感谢 jquery 文档的链接。我什至不知道它们的存在! 谢谢 - 加载失败主要是由于加载目标页面时出现问题。【参考方案4】:

电动工具箱中有一篇名为 "Loading content with jQuery AJAX and dealing with failures" 的文章似乎可以回答您的问题。

显然,您指定的回调函数会传递响应、状态和 XmlHttpRequest 对象,从而允许您确定 ajax 请求的状态并相应地处理条件。

【讨论】:

以上是关于如何在 jQuery 的 load() 方法中捕获错误的主要内容,如果未能解决你的问题,请参考以下文章

如何捕获 jQuery AJAX 错误?

Jquery .load 同源策略

jquery如何判断一个文件是不是存在,求关键代码。

怎么解决jquery 中 load 事件重复载入js的问题?

如何使用 jquery/javascript 捕获页面上的所有回发?

jquery通过load获取文件的内容并跳到锚点的方法