2017-10-30 20 views
1

私はいくつかのAJAX呼び出し方法(ES6)から呼び出さ停止AJAXリクエストに

export default class AjaxCall { 
    constructor(options) { 
    // some options 
    } 

    ajax(options) { 
    return new Promise((resolve, reject) => { 
     $.ajax(options).done(resolve).fail(reject); 
    }); 
    } 

    doAjax() { 
    return this.ajax({ 
     type: 'GET', 
     ... 
    } 
} 

を行うクラスを持っていると私は私が疑問に思ってどのようなので、別のファイルに

import AjaxCall from './ajax'; 

$(function() { 
    const options = {...}; 

    const ajaxCall = new AjaxCall(options); 

    $('.button-start').on('click', function() { 
    ajaxCall.doAjax(options ...); 
    }); 

}); 

このAJAXを呼び出していますメソッド(または他の方法)を使用することができれば、それはAjax呼び出しを停止します。そうすれば、クリックでこのメソッドを呼び出す別のボタンを持つことができます。

xhr.abort()がありますが、それはxhrがajax呼び出しに設定された変数である場合に使用されます。

+3

にその繰延オブジェクトAPIにcatchメソッドを追加したことありますか?既に約束通りです。メソッドから返すだけであれば、 '.abort()'メソッドを使うことができます。 – Phil

+0

さて、私はそれが本当の約束であることを望んでいました。特別な理由はないと思っています。tb34 –

+1

'$ .ajax'への参照を保存する必要があるので、' .abort() 'を実行することができます。このコードは駄目です。 – PHPglue

答えて

2

Promiseにラップする代わりにjqXHRオブジェクトを返すだけです。

ajax(options) { 
    return $.ajax(options); 
}; 

この方法で、あなたは例えば

FYI
let jqXHR = ajaxCall.doAjax(options ...) 
if (someAbortReason) { 
    jqXHR.abort() 
} 

abortメソッドへのアクセスを、持っている... jQueryの1.5のよう$.ajax()によって返さ

jqXHRオブジェクトを実装しますプロミスのすべてのプロパティ、メソッド、およびビヘイビアを与えるPromiseインターフェイス(詳細はDeferred objectを参照してください)オーマメーション)。しかし、注意すべき

一つ重要なことは、jQueryのだけなぜ約束で `jqXHR`をラップV3.0

+0

私はこれを試してみます。私はそれがPromiseのような振る舞いを持っていることを知っていましたが、もし 'catch'メソッドがあればビルドにjQuery 3をバンドルできます(私はwebpackを使用しています)。 –

関連する問題