1

またはが実行されるjQuery.ajax()前に、でサーバーからのJSON応答を処理することは可能ですか?completeerror

または、質問を拡張させてください。

JSONデータ(各応答プロパティ)の処理中に、それ$.ajax()がAJAXリクエストであるか、それとも実行されるのかを判断successしますか?completeerror$.ajax({error: function() {} });


擬似コードの例:

$.ajax({
    url: 'script.php',
    type: 'POST',
    data: {some: 'data-1'},
    dataType: 'json',
    process: function(data) {
        if(data.success == true && (data.data.length > 0)) {
            this.success = true;
        } else {
            this.success = false;
        }
    },
    success: function() {
        if( this.success == true ) {
            // it was a success
        }
    },
    error: function() {
        if( this.success == false ) {
            alert('there was an error');
        }
    }
});

なぜあなたは尋ねるかもしれませんか?$.ajax()どこでも単一の構文を使用したいので$.ajax({ process: function(data) {} });、時々変更する必要があるだけです。

4

3 に答える 3

0

はい、そうです

function setDefaultPoint(){
    var officeId =  $('#clientTrip_officeId').val();

    $.ajax({
        url:"${createLink(controller:'clientTrip',action:'setDefaultPoint')}",
        dataType: "json",
        data: { officeId: officeId },
        success: function(data) {
            console.log(data.defaultPoint.id, data.defaultPoint.name);
            console.log(data.company.id, data.company.name);
        }

    });
}
于 2013-03-01T12:36:25.143 に答える
0

ajax イベント用のグローバル イベント ハンドラーがあります。

$(document).ajaxComplete() //called when Ajax requests complete
$(document).ajaxError() //called when Ajax requests complete with an error
$(document).ajaxSend() //executed before an Ajax request is sent
$(document).ajaxStart() //called when the first Ajax request begins
$(document).ajaxStop() //called when all Ajax requests have completed
$(document).ajaxSuccess() 
//function to be executed whenever an Ajax request completes successfully

ajaxセットアップと同様:

$(document).ajaxSetup({
    url: 'script.php',
    type: 'POST',
    data: '{}',
    dataType: 'json'
});

次に、次のように呼び出すことができます。

 $.ajax({ data: myData });

そして、それは上記のすべてを使用します

.d プロパティを送り返す asp.net を使用した例を次に示します。これにより、必要な JSON だけに変換されます。

$(document).ajaxSetup({
    data: "{}",
    dataType: "json",
    type: "POST",
    contentType: "application/json",
    converters: {
        "json jsond": function(msg) {
            return msg.hasOwnProperty('d') ? msg.d : msg;
        }
    },
    error: function(xhr, textStatus, errorThrown) {
        var errorMessage = "Ajax error: " + this.url
             + " : " + textStatus + " : " + errorThrown 
             + " : " + xhr.statusText + " : " + xhr.status;
        alert(errorMessage);
        if (xhr.status != "0" || errorThrown != "abort") {
            alert(errorMessage);
        }
    }
});

注:このコンバーターは成功または完了の前に実行されるため、これがあなたが求めているものだと「思います」。

于 2013-03-01T14:22:23.213 に答える
0

独自の JSON パーサーを作成する場合を除き、単純な答えはノーです。

標準の jQuery 機能を使用すると、整形式の JSON 以外のデータの正確性に関係なく、データの取得の成功/失敗に応じて AJAX の成功およびエラー ハンドラーが起動します。

データは成功ハンドラーにのみ提供されるため、フィルター処理する場合はその中で行う必要があります。

$.Deferred()良いニュースは、2 つのハンドラーのいずれかで、選択した条件に応じて解決/拒否される、独自の制御下で、求める種類のアクションを取得できることです。これは通常、Deferred の promise を返す関数内で行われます。

コードは次のようになります。

function getData() {
    var dfrd = $.Deferred();
    $.ajax({
        url: 'script.php',
        type: 'POST',
        data: {some: 'data-1'},
        dataType: 'json'
    }).done(function(data, textStatus, jqXHR) {
        if(data.success == true && (data.data.length > 0)) {
            dfrd.resolve(data, textStatus, jqXHR);
        } else {
            dfrd.reject(jqXHR, "client-side error", "data.success==false and/or data.data.length==0");
        }
    }).fail(dfrd.reject);
    return dfrd.promise();
}

したがって、関数は必要な追加のチェックを実行し、返された promise は jqXHR の完了/失敗の特性をエミュレートします。

返されたプロミスに jqXHR の完全な機能を与えるには、もう少し考えが必要です。.abort()メソッド。

于 2013-03-01T13:10:36.310 に答える