![](/img/trans.png)
[英]Call a function is JavaScript that calls a promise function and returns the result to the original function
[英]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.