2016-04-29 1 views
0

が進行中のすべてのXHRは殺す進行中のすべてのXHRは

$( '#検索ボックス')。からkeyup(関数(){検索データをバインドする// VARを要求殺す要求します入力= $( '-入力を検索します。')のval();。

$.getJSON({ // get JSON data 
     url: 'example/query.php?keyword=' + input, 
     //pre-load 
     beforeSend: function() { 
      $(".search-lists").html("<span class='loading'><img src='_/images/loading.gif' /></span>"); 
     }, 
     success: function(data) { 
      if (input.length >= 3) { // limit keyword to >=3 
       var output = "<ul class='search-lists'>"; //output search data list 
       $.each(data, function(key, val) { 
        output += '<li>'; 
        output += '<a>' + val.term + '</a>'; 
        output += '</li>'; 

       }); 
       output += '</ul>'; 
       $('.search-results').html(output); 
       console.log('load ajax'); 
      } // end if 

      else { 
       console.log('kill ajax'); 
      } 
     } 


    }); // JSON request 

}); // data bind 
+0

'$ .getJSON(入力の長さは、<3であるか、XHRの結果はあなたがすべて殺すべきで空の配列の場合は、{' ... – Rayon

+0

おかげでレーヨン、私はこの他のものをどのように修正すればよいの前に置き、あなたの状態を現在進行中のXHRリクエストとあなたが質問をしていなかった。 – webmansa

+0

@rayonはあなたが最後の質問で私を助けることができるドロップダウンを閉じて「a.isEmptyObjectが」ではないと言います機能あなたはそれで私を助けることができるが、 'はconsole.log(typeof演算データ、データ)何@sesay – webmansa

答えて

0

あなたはフィルタリングを行うだけよりも、最初のチェックを行う必要がある。また、私はを使用してお勧めします。サーバー呼び出しを削減する:

<section id="search-box"> 
    <form class="search-field"> 
     <input id="search" class="search-input" type="text" value="Hello, I'm looking for..." /> 
    </form> 
    <div class="search-results"></div> 
</section> 


var timer; 

$('#search-box').keyup(function() { // bind the search data 
    clearTimeout(timer); 

    var input = $('.search-input').val(); 

    if (input.length < 3) { 
     return; 
    } 

    timer = setTimeout(function() { 
     $.getJSON({ // get JSON data 
      url: 'http://test.sonsuzdongu.com/query.php?keyword=' + input, 
      //pre-load 
      beforeSend: function() { 
       $(".search-lists").html("<span class='loading'><img src='_/images/loading.gif' /></span>"); 
      }, 
      success: function(data) { 
       var output = "<ul class='search-lists'>"; //output search data list 

       $.each(data, function(key, val) { 
        output += '<li><a>' + val.term + '</a></li>'; 
       }); 

       output += '</ul>'; 
       $('.search-results').html(output); 
       console.log('load ajax'); 
      } 
     }); // JSON request 
    }, 300); //setTimeout 
}); // data bind 

は、すべての要求を殺す - あなたは(要求がより終了します)ページをリロードしてみてください。または、単に出力を処理する必要があるかどうかを示すフラグを追加します。

success: function (data) { 
    if (!data.isEmptyObject()) { 
     // do processing. 
    } 
} 
+0

こんにちは、Justinasを私のコンソールエラーが動作しないようです – webmansa

+0

をPLSの;'言う – Justinas

+0

これは私の完全なにconsole.log結果scripts.jsです:?1キャッチされない例外TypeError:a.isEmptyObjectではありませんfunctionsuccess @ scripts.js:1fire @ jquery.js:3187fireWith @ jquery.js:3317done @ jquery.js:8785(匿名関数)@ jquery.js:9151 – webmansa

0

xhr要求を取り消す方法があります。abortがあります。あなたはあなたの要求に従ってそれを使うことができます。

+0

あなたはPLSのは、ちょっと失われたおかげで、このSO質問を参照してください – webmansa

+0

どのように私を見ることができ、[リンク](http://stackoverflow.com/questions/4551175/how-to-cancel-abort-jquery-ajax-request) –

0

ちょうどこのような要求を保存し、いつでも好きなときに、あなたは要求を中止することができます。

var request = null; 

.... 
.... 

function fetchJSON(){ 
    if(request != null) { 
     request.abort(); 
    } 
    request = $.getJSON({ // get JSON data 
      url: 'example/query.php?keyword=' + input, 
      //pre-load 
      beforeSend: function() { 
       $(".search-lists").html("<span class='loading'><img src='_/images/loading.gif' /></span>"); 
      }, 
      success: function(data) { 
       request = null; 
       if (input.length >= 3) { // limit keyword to >=3 
        var output = "<ul class='search-lists'>"; //output search data list 
        $.each(data, function(key, val) { 
         output += '<li>'; 
         output += '<a>' + val.term + '</a>'; 
         output += '</li>'; 

        }); 
        output += '</ul>'; 
        $('.search-results').html(output); 
        console.log('load ajax'); 
       } // end if 

       else { 
        console.log('kill ajax'); 
       } 
      } 


     }); // JSON request 

    }); // data bind 
} 
関連する問題