在.get调用中将jQuery.prush推送到数组中会得到一个空结果
jQuery .push into an Array in a .get call gives an empty result
有人能告诉我为什么下面给了我一个空字符串吗?当我在$.get()
回调函数中console.log(contentArray)
时,它会显示数据,但当我尝试在下面代码中的位置执行时,结果是空的。
sectionArray = [];
contentArray = [];
$(function () {
if (index == 1) {
$('menu:eq(' + (section - 1) + ') li a').each(function () {
sectionArray.push($(this).attr('href'));
});
var len = sectionArray.length;
for (var i = 0; i < len; i++) {
href2 = sectionArray[i];
$.get(href2, function (data) {
string = data.toString();
contentArray.push(string);
});
}
content = contentArray.toString();
console.log(content);
}
因为ajax请求在调用console.log()
后结束,请尝试以下操作:
$.get(href2, function(data){
string = data.toString();
contentArray.push(string);
content = contentArray.toString();
console.log(content);
});
同样,在循环中执行ajax请求并不是最好的做法。这不会像您想要的那样工作。
更新:
jQuery还将async
选项设置为false,您的代码应该可以工作,但工作速度会很慢。同步请求可能会暂时锁定浏览器。
更新2
也许可以试试这样的东西(也许不是那么好主意:D):
var countRequests = len;
$.get(href2, function(data){
string = data.toString();
contentArray.push(string);
countRequests = countRequests - 1;
if (countRequests == 0) {
content = contentArray.toString();
console.log(content);
// or create callback
}
});
问题是您的$.get()
ajax请求是异步执行的。
也就是说,$.get()
函数在不等待响应的情况下立即返回,整个for循环完成(将多个ajax请求排队),然后出现console.log()
,此时数组仍然为空。只有在那之后,才会调用任何ajax成功处理程序,而不管ajax响应返回的速度有多快。
编辑:下面是另一个问题的答案,它显示了在所有ajax调用完成后如何做某事:https://stackoverflow.com/a/6250103/615754
相关文章:
- 检查搜索结果是否存在多次如果是,则在Javascript中只显示一个结果
- Ajax/Php得到一个以上的结果
- 一个javascript实现base64图像编码并将结果写入文本文件
- 乘法返回一个奇怪的结果
- 尝试添加一个选项以使用append进行选择,但没有任何结果
- 如何只输出一个SQL结果
- MeteorJS从上一个函数中检索JS中的结果
- 使用NextToken使用javascript aws-sdk解析下一个结果
- 我有一个字段计算,如果结果低于 60,则需要显示最小值
- 如何等待一个HTML页面并在页面复杂创建时获得结果
- 角度 2:使用一个 http 调用的结果来执行另一个调用
- Meteor:如何遍历一个数组,这是一个异步方法的结果
- json结果显示第一个值
- 做了一个javascript小实验,需要你的帮助才能理解意外的结果
- 访问来自另一个函数的函数结果
- 读取一个本地文件,编码为base64,我想给用户一个将结果保存到文件的选项
- 将函数结果传递给Javascript中的另一个函数变量
- 当我运行代码时,我得到以下结果 []对象对象] [对象对象],但应该给我一个有序数组
- 有没有一个简单的解决方案可以根据3个数据找到结果
- 给每个谷歌距离矩阵结果一个id