2

リモートサーバーへの多数の ajax 呼び出しがあり、それらを広範囲に使用するアプリケーションを作成しています。コードはすべての呼び出しでほぼ同じなので、再利用できる新しい関数を作成したいと考えています。「データ」パラメーターのパラメーター構造を定義する際に私は頭を悩ませました。私の問題を以下に説明します。

現在の ajax 呼び出しのサンプルを以下に示します。

現在の通話サンプル:

$.ajax({
    beforeSend: function() {
        $.mobile.loading('show');
    },
    complete: function() {
        $.mobile.loading('hide');
    },
    type: 'GET',
    url: 'http://localhost/test-url/',
    crossDomain: true,
    data: {appkey: '1234567', action: 'action1','name':'me'},
    dataType: 'jsonp',
    contentType: "application/javascript",
    jsonp: 'callback',
    jsonpCallback: 'mycallback',
    async: false,
    error: function() {
        //some operations
    },
    success: function(data) {
        //some operations
    }
});

私が作成した再利用可能な関数:

function newAjax(parm, successCallback, errorCallback) {
    $.ajax({
        beforeSend: function() {
            $.mobile.loading('show');
        },
        complete: function() {
            $.mobile.loading('hide');
        },
        type: 'GET',
        url: 'http://localhost/test-url',
        crossDomain: true,
        data: {appkey: '1234567', parm: parm},
        dataType: 'jsonp',
        contentType: "application/javascript",
        jsonp: 'callback',
        jsonpCallback: 'mycallback',
        async: false,
        success: function() {
            successCallback();
        },
        error: function() {
            errorCallback();
        }
    });
}

質問:

  • 「parm」パラメーターを介して ajax 呼び出しのパラメーターを渡します。データ値を親の「データ」パラメーターに直接追加したい。データのサブオブジェクトとしてではありません。appKey はすべての呼び出しで同じままなので、実際の関数に保持します。

  • 成功とエラーの両方のコールバック関数をオプションにしたい。提供されていない場合は、無視する必要があります。

4

1 に答える 1

5
  1. このメソッドを使用しjQuery.extendて、2 つ以上のオブジェクトを結合できます。

    data: jQuery.extend({appkey: '1234567'}, parm),
    
  2. ;successCallbackerrorCallback使用して実際に関数が渡されたことを確認できます。typeof var === 'function'

    success: function () {
        if (typeof successCallback === 'function') {
            successCallback();
        }
    }, 
    
    error: function () {
        if (typeof errorCallback === 'function') {
            errorCallback();
        }
    }
    

    ... AJAX リクエストによって作成された Promise を返し、呼び出し元が必要に応じて成功、エラー ハンドラーを追加できるようにする方が良いかもしれません。

    function newAjax(parm) {
       return jQuery.ajax({
           /* as before, but without success and error defined */
       });
    }
    

    ... それから:

    newAjax().done(function () {
        // Handle done case
    }).fail(function () {
        // Handle error case.
    });
    

    呼び出し元がエラー ハンドラーを追加したくない場合は、呼び出しませんfail()

    newAjax().done(function () {
        // Handle done case
    });
    
于 2013-11-11T16:46:05.173 に答える