0

我有一个搜索结果页面,并且在页面准备就绪时,我有 ajax GET 来预先请求每个结果项 url,以便预先缓存这些页面。

例如。

$('.link').each(function(){
  $.get($(this).attr('href'));
});

抛开这是否是正确方法的争论,我如何在 jQuery 中发出请求页面的 ajax GET 请求,等待状态代码更改然后中止请求(换句话说,不需要接收内容)?

我遇到过这篇文章,但我不知道如何将其合并到 jQuery GET 函数中。

4

4 回答 4

0

也许您正在寻找一个同步的 AJAX 调用。您的脚本将等待请求完成,然后才能继续运行。然后您可以检查statusAJAX 对象的属性。

var ajaxCall = $.ajax({
    type: "GET",
    async:false,
    url: "server.php",
    data: "name=James&location=Auckland",
});
if (ajaxCall.status == 200){
  // request executed successfully 
}

异步

默认情况下,所有请求都是异步发送的(即默认设置为true)。如果您需要同步请求,请将此选项设置为 false。

于 2012-09-06T23:53:49.020 回答
0

如果您想在发送 AJAX 调用后简单地中止它。您也许可以使用该abort()功能。您可能会发现AJAX 对象的其他属性很有用。

var ajaxCall = $.ajax({
    type: "GET",
    url: "server.php",
    data: "name=James&location=Auckland",
    success: function(response){
       alert( "Response: " + response );
    }
});

//abort the request
ajaxCall.abort();

如果您只想触发 AJAX 请求并处理 statusCode 更改,则此代码可能很有用。

$.ajax({
  statusCode: {
    200: function() {
      alert("request successful");
    }
  }
});

200此回调在设置状态代码时触发- 一个完整的请求。您可以将此代码更改为您要检测的任何状态代码。在该回调中,您可以调用该abort()函数。

于 2012-09-06T23:44:41.887 回答
0

我要做的是:

var $page = $('<div>').load('/somepage body', function() {
    // code to do something when its loaded
});

如果您不放置选择器,它将在其中触发脚本。您也可以这样做,但您必须相应地编写脚本。

但要回答您的具体问题:

var pages = [];

function allLoaded() {
   console.log('all pages loaded');
}

$('.link').each(function(){
    var $page = $('<div>'), href = $(this).attr('href');
    $page.load(href + ' body', function() {
       pages.push({href: href, html : $page.html()});
       if (pages.length === $('.link').length) {
          allLoaded();
       }
    }
});

你不只是喜欢闭包吗?

于 2012-09-06T23:45:19.720 回答
0

如果这个问题的最终目标是发出请求,获取 url 的状态,然后不下载内容,那么最好的办法是不要覆盖 AJAX GET HTTP 方法,而是使用 HEAD HTTP 方法。

堆栈溢出:

如何在 jQuery 中测试 URL

JQuery Docs(查看“类型”属性):

http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings

于 2013-05-28T19:24:15.800 回答