web-dev-qa-db-ja.com

jQuery:同期AJAXリクエストを実行する

私は過去にいくつかのjQueryをやったことがありますが、私は完全にこれにこだわっています。私は同期Ajax呼び出しを使用することの賛否両論について知っています、しかしここでそれは必要とされるでしょう。

リモートページはロードされます(firebugで制御されます)が、リターンは表示されません。

関数が正しく戻るようにするにはどうすればいいですか?

function getRemote() {

    var remote;

    $.ajax({
        type: "GET",
        url: remote_url,
        async: false,
        success : function(data) {
            remote = data;
        }
    });

    return remote;

}
176
Industrial

同期要求をしているので、それはあるべきです

function getRemote() {
    return $.ajax({
        type: "GET",
        url: remote_url,
        async: false
    }).responseText;
}

例 - http://api.jquery.com/jQuery.ajax/#example-

注意:asyncプロパティをfalseに設定するのは推奨されなくなり、その過程で削除された( link )これを使用すると、FirefoxやChromeを含む多くのブラウザがすでにコンソールに警告を表示し始めています。

クロム:

メインスレッド上の同期XMLHttpRequestは、エンドユーザーのエクスペリエンスに悪影響を与えるため、推奨されません。詳細については、 https://xhr.spec.whatwg.org/ を確認してください。

Firefox:

メインスレッドでの同期XMLHttpRequestは、エンドユーザーのエクスペリエンスに悪影響を与えるため、推奨されません。より多くの助けを求めて http://xhr.spec.whatwg.org/

284
Dogbert

あなたは間違ってajax関数を使っています。同期しているので、データをインラインで返します。

var remote = $.ajax({
    type: "GET",
    url: remote_url,
    async: false
}).responseText;
30
Jake

そのURLはどのくらい離れていますか。同じドメインからですか?コードは問題ないようです

これを試して

$.ajaxSetup({async:false});
$.get(remote_url, function(data) { remote = data; });
// or
remote = $.get(remote_url).responseText;
17
TheBrain
function getRemote() {
    return $.ajax({
        type: "GET",
        url: remote_url,
        async: false,
        success: function (result) {
            /* if result is a JSon object */
            if (result.valid)
                return true;
            else
                return false;
        }
    });
}
3
user3116547