[英]Can the "success" callback of jQuery.ajax() distinguish two calls to the same script?
[英]jQuery.ajax() success callback store data to return
我正試圖從項目中的PHP腳本中獲取一些數據。 我發現搜索AJAX回調函數的所有示例都“使用”回調本身已有的數據,但我想獲取數據並以准備返回的方式存儲它。
function getEle (id) {
var element = [];
$.ajax({
url: 'slides.php',
type: 'POST',
data: {"id": id},
success: function(data) {
var content = data;
element[0] = id;
element[1] = content;
// if I alert(element[1]); here it will work!
}
});
alert(element[1]); // here it just won't :/ ("undefined")
return element;
}
在我的腳本的某個地方,某些功能需要getEle(ments)
但我得到的都是undefined
。 有辦法做我想要的嗎? 或者有更好的方法可以做到這一點?
解決方案是將回調函數傳遞給getEle()
:
getEle(id, callback){
$.ajax({
/* some options, */
success: function(){
var content = data;
element[0] = id;
element[1] = content;
callback(element);
}
})
}
然后傳遞一個函數,其中包含元素內容時要執行的操作的代碼:
getEle('myId', function(element){
alert(element[1]);
});
這里有兩件事情失敗了:
var
,只需編寫content = data
,這樣可以全局訪問。 看看這個。
function getEle (id, callback) {
var element = [];
$.ajax({
url: 'slides.php',
type: 'POST',
data: {"id": id},
success: function(data) {
var content = data;
element[0] = id;
element[1] = content;
callback(element);
}
});
}
}
getEle ("someID", function(someElement) {
alert(someElement);
});
以下是您的代碼中發生的情況:
您可以考慮使用全局變量來解決此問題:
var element = [];
function getEle (id) {
$.ajax({
url: 'slides.php',
type: 'POST',
data: {"id": id},
success: function(data) {
var content = data;
element[0] = id; // the global "element" is set
element[1] = content;
}
});
}
// element[0] will exist now, but only after the AJAX call is complete
或者,您可以將AJAX轉換為同步調用:
function getEle (id) {
var element = [];
$.ajax({
async: false, // forces synchronous call
url: 'slides.php',
type: 'POST',
data: {"id": id},
success: function(data) {
var content = data;
element[0] = id;
element[1] = content;
}
});
alert(element[1]); // now it is set
return element;
}
我能看到的唯一另一個選擇是將所有內容保持在“成功”回調中,你已經發現它可以正常工作。
在其余代碼完成后,您的回調會執行一段時間。
你需要使用回調傳遞值,就像$.ajax
那樣。
您的警報最終未定義,因為AJAX調用是異步的。 因此,當AJAX調用正在等待服務器的響應時,腳本將繼續執行警報,此時尚未定義element[1]
。
您應該將return element
行放在success
回調函數中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.