我花了几个小时才让下面的代码正常工作。代码应该暂停,直到页面加载完成。我遇到的问题是AJAX是异步执行的。如何强制代码在执行前等待?
var i = 1;
function On_Success(){
i = i+1;
if(i<=10){
$('<div id="p'+i+'">b</div>').replaceAll('#b');
$('#p'+i).load('tabelle.html');
//here shoul be waited, til the page is loaded
On_Success();
};
};
function knopf(){
$('body').append('<div id="p'+i+'">a</div>');
$('#p'+i).load('tabelle.html');
On_Success();
};
发布于 2011-08-26 22:45:17
.load
接受在加载完成时运行的回调;您可以使用它来代替更冗长的jQuery.ajax
函数,后者需要您编写额外的代码来填充您的元素。
jQuery("#p", i).load("tabelle.html", function() {
//code to run when tabelle.html has finished loading
});
将您的代码更改为以下代码。它应该是有效的:
var i = 1;
function On_Success() {
i = i + 1;
if (i <= 10) {
$('<div id="p' + i + '">b</div>').replaceAll('#b');
$('#p' + i).load('tabelle.html', On_Success);
};
};
function knopf() {
$('body').append('<div id="p' + i + '">a</div>');
$('#p' + i).load('tabelle.html', On_Success);
};
另外,在填充其他div之前,是否一定要等待一个加载完成?为什么你不能这样做:
function On_Success() {
var i = 0;
while(i < 11) {
$('<div id="p' + i + '">b</div>').replaceAll('#b');
$('#p' + i).load('tabelle.html');
};
};
另外,我也不确定knopf
函数在做什么。该函数中i
的值应该是什么?你如何调用你的代码?
发布于 2011-08-26 22:45:39
Ajax和load都有一个successs
函数,该函数可以在响应完全返回时运行。
$.ajax({
async: true,
type: "GET",
url: url,
data: params,
success: function(html){
//do stuff here
},
error: handleAjaxErrors
});
如果您想使用load,还有一个成功的回调:
$("#myDiv").load('/ajax/data/get', function() {
//do stuff here
});
发布于 2011-08-26 22:48:19
load函数有一个成功处理程序:
$('#p'+i).load('tabelle.html', function() {
On_Success();
});
只有在ajax调用成功完成并将所提供的内容添加到DOM之后,才会调用成功处理程序。
您可以在此处查看完整的文档:
http://api.jquery.com/load/
如果您还希望捕获客户端上的错误条件,则需要按照@Chris的回答使用完整的$.ajax
调用。
https://stackoverflow.com/questions/7206439
复制相似问题