3

最近、いくつかのajax関数を作成していますが、小さな問題に直面しています。ajaxを呼び出す関数があります。値を付けて、リクエストが完了したらその関数を返したいと思います。どうすればよいですか:

  • ajaxサブ関数からのリターンをトリガーします
  • 「answer」変数が変更されるのを待ってから、それを返します

これが精神です(実際、それは機能しません):

var answer = null;
    $.ajax({
        url: "validate/"+id,
        type: 'POST',
        data: {'field' : value},
        success: function(data) {
            //noty({text: data, type: 'success'});
        },
        error:function (xhr, ajaxOptions){
            noty({text: xhr.status + " : " + xhr.responseText, type: 'error'});
            answer = "error";
        } 
    });

return answer;

ありがとうございました!

4

2 に答える 2

4

AJAX 要求は非同期returnで発生するため、AJAX 関数から値を取得することはできません(リモート Web ページを取得するのにかかる時間を考えてみてください)。

代わりに、コールバック (リクエストが完了したときに実行される関数) を提供する必要があります。

function ajaxFunction(onComplete) {
    $.ajax({
        url: "validate/"+id,
        type: 'POST',
        data: {'field' : value},
        success: function(data) {
            //noty({text: data, type: 'success'});
            onComplete(data);
        },
        error:function (xhr, ajaxOptions){
            noty({text: xhr.status + " : " + xhr.responseText, type: 'error'});
            onComplete(error);
        }
    }
}

次に、関数をパラメーターとして に渡しますajaxFunction。これにより、AJAX 要求からの応答が受信されます。

ajaxFunction(function (answer) {
    // do something with answer
});

idandパラメータが必要なため、valueそれらをメソッドの引数に追加できますajaxFunction

于 2012-06-19T13:51:02.323 に答える
0

async: falseフラグを使用します - jQuery.ajaxのドキュメントを参照してください。

jQuery 1.8 では、 の使用はasync推奨されないことに注意してください。

var answer = null;

$.ajax({
    url: "validate/"+id,
    type: 'POST',
    data: {'field' : value},
    success: function(data) {
        //noty({text: data, type: 'success'});
    },
    error:function (xhr, ajaxOptions){
        noty({text: xhr.status + " : " + xhr.responseText, type: 'error'});
        answer = "error";
    },
    async: false
});

return answer;
于 2012-06-19T13:54:29.837 に答える