jqueryeach/ajax在循环时不更新元素
在从ajax调用中获取一些数据之后,我正在尝试更新一个列表。它是这样工作的jqueryeach/ajax在循环时不更新元素,jquery,ajax,dom,each,Jquery,Ajax,Dom,Each,在从ajax调用中获取一些数据之后,我正在尝试更新一个列表。它是这样工作的 $.ajaxSetup({ async: false }); $.ajax(jsonUrl, { dataType: "json", success: function(data) { $.each(data.list, function(k,v) { addOutput("doing something with "+v);
$.ajaxSetup({
async: false
});
$.ajax(jsonUrl, {
dataType: "json",
success: function(data) {
$.each(data.list, function(k,v) {
addOutput("doing something with "+v);
(...)
}
},
(...)
});
$.ajaxSetup({
async: true
});
添加输出:
function addOutput(text, color) {
color = typeof color !== 'undefined' ? color : '#fff';
var date = new Date();
var h = ("0"+date.getHours()).slice(-2);
var m = ("0"+date.getMinutes()).slice(-2);
var s = ("0"+date.getSeconds()).slice(-2);
var li = "<li style='background-color: "+color+"; padding: 2px; pading-left: 3px;'>"+h+":"+m+":"+s+" - "+text+"</li>"
$("#output_list").prepend(li);
函数addOutput(文本、颜色){
颜色=颜色类型!=“未定义”?颜色:“#fff”;
变量日期=新日期();
var h=(“0”+date.getHours()).slice(-2);
var m=(“0”+date.getMinutes()).slice(-2);
var s=(“0”+date.getSeconds()).slice(-2);
var li=““+h+”:“+m+”:“+s+”-“+text+” ”
$(“#输出列表”)。前置字符(li);
}
addOutput(text)正在向输出控制台添加一个新的更新:添加了addOutput您可能希望执行此操作
$.ajax(jsonUrl, {
dataType: "json",
success: function(data) {
$.each(data.list, function(k,v) {
addOutput(v); // instead of text, you want to output v. k is index and v is the actual result element
}
},
...
});
例:
var结果=[1,2,3,4,5,6,7,8,9];
var指数=0;
$。每个(结果、函数(){
show();
调试器;
});
函数show(){
$('.add')。追加(“+index+”);
指数+=1;
}
您将发现调试器在删除每个元素并将其添加到DOM中时停止。如果我没有错,则只有在请求具有完整响应时才会调用success,因此这不是问题,因此,如果您想在加载列表中留下印象,您可能必须使用waits for each.each执行一些代码 为什么要禁用异步?这使得浏览器执行请求时不会让用户看到卡住的屏幕
关于这一点,看不到此处设置的“text”变量在哪里
async
是一个可以通过.ajax()
方法传递的选项,无需执行$。ajaxSetup()
这只是一个示例,显示addOutput获取一些文本以在某些分区中显示为列表元素。类似于控制台窗口。元素添加得很好,但我的问题是,它们都在$之后立即显示,而不是在$之后。每个元素仍在运行。您是否找到解决方案?我现在面临着同样的问题。也许我应该更详细地解释我的问题。addOutput不是这里的问题。该函数正在向div窗口中添加元素,但不是在循环通过$。each时添加元素。它正在等待$。每个完成,然后添加所有元素,但这不是我想要的。我想让他们一个接一个地列出,而它仍然是循环。console.log输出工作正常。正在调用btwSuccess,我将进入该$。每个循环中,但在循环时未添加元素。console.log输出打印得很好。我禁用async是因为我想在该$中执行更多的请求。每个请求都可以让我一个接一个地看到发生了什么。我只是在为自己构建/测试一些后端选项,所以用户不会被卡住。哦,我有一些函数,可以在以后取消循环。
<div class="add"></div>
var result = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var index = 0;
$.each(result, function () {
show();
debugger;
});
function show() {
$('.add').append("<h1>" + index + "</h1>");
index += 1;
}