0

ここでの問題は、ajax リクエストを使用して myBookmarks 変数に値を返す関数があることです。この変数は、残りの JavaScript (表示されていません) を実行する前に割り当てる必要があります。したがって、 async: false を設定するとうまくいきますが、Firefox では次のようになります。

XMLHttpRequest の withCredentials 属性の使用は、ウィンドウ コンテキストの同期モードではサポートされなくなりました。

setTimeout を使って解決策を模索してきましたが、setTimeout 内の無名関数がブックマークの値を上位関数に返すことができません。

問題は、index() 関数内で実行を一時停止し、ブックマークの値を async: false を使用せずに上位レベルの myBookmarks var に戻す方法です。

var myBookmarks = index();

function index() {
    var bookmarks = false;

    $.ajax({
        xhrFields: {
            withCredentials: true
        },
        crossDomain: true,
        async: false,
        url: BOOKMARKS_URL,
        contentType: 'application/json',
        dataType: 'json',
        success: function(data){
            if (!data.errors) {
                // INDEX SUCCESS
                bookmarks = data;
            } else {
                // INDEX FAILURE
            }
        }
    });

    return bookmarks;
}
4

1 に答える 1

1

index() 関数内で実行を一時停止し、async: false を使用せずにブックマークの値を上位レベルの myBookmarks var に戻す方法

できません。1 つのオプションは、コールバックを提供し、非同期関数が完了したときにそれを呼び出すことです。

function index(successCallback) {

    $.ajax({
        xhrFields: {
            withCredentials: true
        },
        crossDomain: true,
        async: false,
        url: BOOKMARKS_URL,
        contentType: 'application/json',
        dataType: 'json',
        success: function(data){
            if (!data.errors) {
                // INDEX SUCCESS
                successCallback(data)
            } else {
                // INDEX FAILURE
            }
        }
    });
}

次に、次のように呼び出します

index(function(bookmarks){
  // do something with bookmarks
});
于 2013-08-16T14:03:23.243 に答える