jQuery.ajax()成功回调存储数据返回
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]);
});
这里有两件事失败了:
-
变量范围—在AJAX回调中定义变量内容。这使得周围的代码无法访问它。你可以省略
var
,只写content = data
,这使得它可以全局访问。 - 异步性 -因为AJAX是异步的,回调后的脚本将在回调执行之前执行。解决这个问题的唯一方法是按预期使用回调。
看看这个
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);
});
下面是你的代码:
- 数组"element"初始化。
- AJAX调用使用成功回调函数进行
- 当它在等待AJAX运行时,它会继续执行其余的代码和警报元素[1],它还不存在
- 成功回调运行并填充数组"element"。
你可以考虑用一个全局变量来解决这个问题:
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;
}
我能看到的唯一其他选择是将所有内容都绑定在"success"回调中,您已经发现它工作得很好。
你的回调会在你的代码结束后执行一段时间。
您需要使用回调将值传递回来,就像$.ajax
那样。
由于AJAX调用是异步的,因此警报最终未定义。因此,当AJAX调用等待服务器的响应时,脚本继续发出警报,此时element[1]
还没有定义。
您应该将return element
行放在success
回调函数中。
相关文章:
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 如何以特定格式存储数据?在WYSWYG中
- web浏览器中的离线应用程序存储数据并在之后上传
- 在firebase(web)上存储数据时出现问题
- 使用会话Javascript存储数据
- 通过CK编辑器获取值和存储数据
- 存储数据的最佳方式是什么,以便与jquery一起使用
- 如何在网页之间存储数据
- jQuery 设置和获取下拉列表和输入的本地存储数据
- 如何通过HTML 5 javascript在本地ipad / iPhone上存储数据,并在设备上线时提交
- 使用 Cookie 存储数据
- 如何将本地存储数据提交到 Django
- 如何在循环jQuery中的数组中存储数据
- 正在从表行中删除本地存储数据
- 在web应用程序中存储数据
- 自动将jqgrid滚动到具有存储数据的单元格的当前日期列和闪烁效果
- 如何将复选框呈现为从本地存储数据中选中的复选框
- 如何使用Ajax检索和存储数据
- 方法存储数据,直到浏览器关闭
- 如何在redux sagas完成之前通过meta标签加载初始存储数据