簡體   English   中英

返回ajax調用結果的JavaScript函數

[英]JavaScript function that returns result of ajax call

需要幫助。 我正在寫一個函數返回ajax調用的結果,但我沒有得到任何結果,我想這是一個范圍問題,但有什么辦法可以做到嗎? 這是我的代碼:

function Favorites() {
    var links;
    $.ajax({
        type: "GET",
        url: "/Services/Favorite.svc/Favorites",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        cache: false,
        success: function(msg) {
            links = (typeof msg.d) == 'string' ? eval('(' + msg.d + ')') : msg.d;
        }
    });
    return links;
};

Ajax是異步的,即當執行return links時,甚至可能都沒有調用success的回調函數。

擴展您的函數以接受回調:

function Favorites(callback) {
    var links;
    $.ajax({
        type: "GET",
        url: "/Services/Favorite.svc/Favorites",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        cache: false,
        success: callback
    });
};

並稱之為:

var callback = function(msg) {
      links = (typeof msg.d) == 'string' ? eval('(' + msg.d + ')') : msg.d;
      // do other stuff with links here
}

Favorites(callback);

您的問題是您正在進行的HTTP請求是異步的,並且您的Favorites函數在Ajax請求返回之前返回。 您將需要更改您的函數,以便它接受響應返回后執行的回調:

function Favorites(callback) {
    $.ajax({
        type: "GET",
        url: "/Services/Favorite.svc/Favorites",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        cache: false,
        success: function(msg) {
            var links = (typeof msg.d == 'string') ? eval('(' + msg.d + ')') : msg.d;
            callback(links);
        }
    });
};

Favorites( function(links) { alert(links); } );

除此之外:約定是只有用作構造函數的函數才能以大寫字母開頭,因此您的函數最好命名為favorites

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM