5

私はjQueryを使用しており、AJAXオブジェクトの外部でAJAX呼び出し中に収集されたデータを処理する必要があります:

function getData(yt_url) {
    $.ajax({
        type: "GET",
        url: yt_url,
        dataType: "jsonp",
        success: function(response) {
            //   Return response here //

        },
        error: function(request, status, error) {
            alert(status);
        }
    });
}

getData関数を呼び出して、AJAX の成功関数で応答オブジェクトを受け取りたいと考えています。

いくつかのリターンを追加しようとしましたが、もちろんそれがオブジェクトであることに気付きました。

4

5 に答える 5

10

AJAX は非同期であり、基本的にはスクリプトの実行をブロックしないことを意味します (読み込み中に Web サイトがフリーズしないため、これは良いことです)。

returnあなたがやっているような値の処理は同期的であり、AJAX と互換性がありません。

getData1 つの解決策は、AJAX 要求が終了したときに呼び出されるコールバック関数を に渡すことです。

function getData(yt_url, callback) {
    $.ajax({
        type: "GET",
        url: yt_url,
        dataType: "jsonp",
        success: callback,
        error: function(request, status, error) {
            alert(status);
        }
    });
}​

そして、次のように使用できます。

getData('http://www.example.com/', function(response) {
    alert('The response was: ' + response);
});
于 2012-10-27T08:14:29.993 に答える
1

このようなことを試すことができます-たとえば、ajax呼び出しの結果を格納するグローバル変数を追加します

var ajaxResult = null;

ajax のasyncプロパティをfalseに設定してから、次のように記述します。

var ajaxResult = null;

function getData(yt_url){
$.ajax
        ({
            type: "GET",
                        url: yt_url,
                        dataType:"jsonp",
                        async: false,
                        success: function(response){
                            ajaxResult = response; 

                        },error:function (request, status, error)           
});

}

getData(yt_url); // 関数を呼び出して結果を取得しようとする if(ajaxResult != null){ // ajax 呼び出し中に何らかの結果が得られた場合

    // do something with the result

}

于 2012-10-27T08:14:36.807 に答える
1

AJAX は非同期であるため、コールバック関数でデータを受け取るようにコードを再構築する必要があります。リクエストが終了したら、データに対してやりたいことを続行できます。例:

$.ajax {
    type: "GET",
    url: url,
    dataType:"jsonp",
    success: success,
    error: error
};

function success(data) {
    // continue your work here.
}

function error(request, status, error) {
    // handle any errors here.
}

を使用することはお勧めしませんasync: false。リクエストの実行が完了するまでブラウザがフリーズするためです。一般的には、コードの処理中に応答性を維持したい場合があります。

于 2012-10-27T08:18:57.820 に答える
0

jquery ajax はデフォルトで非同期です。async : false を使用して無効にします。

    function getData(yt_url){
        var data;
        $.ajax
        ({
            type: "GET",
                        async: false,
                        url: yt_url,
                        dataType:"jsonp",success: function(response){
                            //   Return response here //
                            // init data variable
                        },error:function (request, status, error) {alert(status);}
                    });
         return data;
   }
于 2012-10-27T08:12:37.890 に答える