我正试图从项目中的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
。
有办法做我想要的吗?或者有更好的方法可以做到这一点吗?
答案 0 :(得分:7)
解决方案是将回调函数传递给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]);
});
答案 1 :(得分:2)
这里有两件事情失败了:
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);
});
答案 2 :(得分:1)
以下是您的代码中发生的事情:
您可以考虑使用全局变量来解决此问题:
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;
}
我能看到的唯一另一个选择是将所有内容都绑定在“成功”回调中,你已经发现它可以正常工作。
答案 3 :(得分:0)
在其余代码完成后,您的回调会执行一段时间。
您需要使用回调传递值,方式$.ajax
。
答案 4 :(得分:-1)
您的警报最终未定义,因为AJAX调用是异步的。因此,当AJAX调用正在等待服务器的响应时,脚本将继续执行警报,此时尚未定义element[1]
。
您应该将return element
行放在success
回调函数内。