中止 jQuery().load()

IT技术 javascript ajax jquery
2021-03-09 07:02:13

jQuery.load()功能允许您有选择地从另一个页面加载元素(受某些规则约束)。我想知道是否可以中止加载过程。

在我们的应用程序中,用户可以浏览项目列表。他们可以选择单击一个按钮,从另一个文档中加载并显示有关项目的附加信息(这可能需要一些时间)。如果他们在 a.load()仍在发生时选择列表中的不同项目,我希望中止加载。

这可能吗?它甚至值得吗?有任何想法吗?

4个回答

您不能.load()直接使用它,因为它返回用于链接的 jQuery 对象,但是如果您更改为完整$.ajax()调用,则.html()可以,如下所示:

var xhr = $.ajax({
            url: 'mypage.htm',
            success: function(data) {
              $("#myElement").html(data);
            }
          });
//if needed, abort the request later..
xhr.abort();

这使用.abort()XMLHttpRequest 对象上方法来中止加载。

尼克的回答几乎是我所需要的,但不完全是。我使用 .load() 仅从页面加载图像。所以,扩展尼克的答案......

所以,而不是...

$('#myElement').load('mypage.htm #myImage');

我现在用...

var xhr = $.ajax({
            url: 'mypage.htm',
            success: function(data) {
              $("#myElement").html($(data).find("#myImage"));
            }
          });
//if needed, abort the request later..
xhr.abort();
这对我不起作用......我认为问题在于.find......我可以探索其他选项来获取特定的div......而不使用.load
2021-04-18 07:02:13
是否$.ajax为您返回数据?
2021-04-22 07:02:13
听起来返回的 HTML 没有您要查找的元素。data应包含mypage.htm的 HTML $(data).find("#myImage")正在该 HTML 中搜索 ID 为myImage的元素
2021-04-28 07:02:13
我将(数据)转储到屏幕上,它包含我需要的页面……但是 .find 似乎无法在页面中找到 id。我有 $("#google_books_result").html($(data).find("#google_books_resp")); 而 div 是 <div id="google_books_resp">something</div>
2021-05-06 07:02:13
是的,如果我只是简单地执行 $("#myElement").html(data)...但是当我添加 .find...没有任何返回并且我确定调用成功。
2021-05-17 07:02:13

您可以通过jQuery.ajax手动执行此操作。它将返回一个XMLHttpRequest对象,您可以abort根据需要调用对象在成功处理程序中,您可以使用jQuery.html

$("#myElement").load("/mypage #mayImage", function(response, status, xhr) {
  if (status == "error") {
     xhr.abort();
  }
});

应该像这样工作..

或者在另一个事件上,我在一个长字段上发送了一个验证,用户更改了内容,我想停止之前的检查重新检查:

xhr.abort();

$("#myElement").load("/mypage #mayImage", function(response, status, xhr) {
  if (status == "error") {
    xhr.abort();
  }
});