0

検索結果ページがあり、ページの準備ができている状態で、これらのページを事前にキャッシュするために、各結果項目の URL を事前に要求する ajax GET があります。

例えば。

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

これが正しいアプローチであるかどうかの議論はさておき、ページを要求する jQuery で ajax GET 要求を作成し、ステータス コードの変更を待ってから要求を中止するにはどうすればよいでしょうか (つまり、コンテンツを受信する必要はありません)。 )?

この記事に出くわしましたが、これを jQuery GET 関数に組み込む方法がわかりません。

4

4 に答える 4

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

おそらく、同期AJAX 呼び出しが探しているものです。スクリプトは、リクエストが完了するまで待機し、その後に実行を続けます。その後、AJAX オブジェクトのプロパティを確認できます。status

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 に答える