2016-09-23 6 views
1

私のアプリケーションはクエリのコードを実行します。 ユーザーが3947コードを入力します。Extjs ajaxリクエストが無秩序に返されます

それぞれについて、この場合は4つのクエリーを入力します。 しかし、リクエストが非同期であるため、他のリクエストの前に最後に到着することがあります。 最後に返されたレコードは3947ではなく394です。

最後の予定が最後になるようにするにはどうすればいいですか?

listeners: { 
    change: function (sender, newValue, oldValue, eOpts) { 
     loadData(); 
    } 
} 
+0

あなたのコードを表示することができます。それは私たちがよりよく理解するのに役立ちます。 – UDID

+0

あなたのコードについて知らずにこれらの値を配列に入れ、その配列を通る呼び出しを使用する – devbnz

+0

サーバからデータをロードする前にユーザがもっと多くのキーを入力するのを待つべきです。または、指定されたすべてのクエリのデータが必要ですか? – MarthyM

答えて

1

あなたはすべての要求を無視し、この方法でのみ最後を行う可能性が単純化されたように:

listeners: { 
    change: function (sender, newValue, oldValue, eOpts) { 
     if (call_request) clearTimeout(call_request);  
     call_request = setTimeout(loadData, 750); 
}} 
+0

2行のコードで問題を解決しました –

+0

これは私が何か素早く簡単に必要なものです。 –

+0

それはアイデアadis0099、高速かつ簡単です! –

0

非常に単純なextjsでは、バッファを使用できます。たとえば、次のコードは、新しい文字を入力して「変更」イベントを待機するまでに500ミリ秒のバッファ間隔を作成します。したがって、あなたが速く入力すると、完了するまで変更イベントが発生しません。あなたはあなたが望むようにバッファの量で遊ぶことができます

listeners: { 
    change: { 
    buffer: 500, 
    fn: function (sender, newValue, oldValue, eOpts) { 
     loadData(); 
    } 
    } 

EDIT:私は再びあなたの記事を読んで、私は誤解されるかもしれません。だから私はあなたの問題かもしれない別のケースの解決策を提供しています。入力された各番号に対してAJAX要求を送信している場合は、非同期であるため、いつ到着するかを知ることはできません。しかし、あなたは確かに簡単なコードの変更でそれを防ぐことができます。あなたは、これは動作するはずです、例えば約束を使用することができます。

// lets define loadData (just an example) 
var job = new Promise(function(resolve, reject){ 
    resolve(); 
}); 

var loadData = function(){ 
    return new Promise(function(resolve, reject){ 
      // do your job and when it finishes(can be async), call resolve 
      // ... 
      resolve(); 
    }); 
}; 

// listener 
change: function(){ 
    job = job.then(function(){ 
     return loadData(); 
    }); 
} 
関連する問題