JQuery GET,如何让人发火并忘记

时间:2012-09-06 23:37:54

标签: jquery ajax get

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

例如

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

把这个是否是正确的方法的论点放在一边,如何在jQuery中发出请求页面的ajax GET请求,等待状态代码更改然后中止请求(换句话说,不需要收到内容)?

我遇到了this article,但我不知道如何将其合并到jQuery GET函数中。

4 个答案:

答案 0 :(得分:0)

如果您想在发送后简单地中止AJAX呼叫。您可以使用abort()功能。您可能会发现其他properties of the AJAX object有用。

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()函数。

答案 1 :(得分: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();
       }
    }
});

难道你不喜欢关闭?

答案 2 :(得分:0)

也许您正在寻找同步 AJAX调用。您的脚本将等待请求完成,然后才继续运行。然后,您可以查看status property of the AJAX object.

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

异步

     

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

答案 3 :(得分:0)

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

堆栈溢出:

How to test a URL in jQuery

JQuery Docs(查看“type”属性):

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