Javascript My$(document).ajaxComplete()不';行不通
几天来我一直在使用jQuery和AJAX,我已经走到了死胡同。我正在尝试用AJAX加载一些内容-这部分工作得很好-然后我想执行其他脚本。但是,在第二个脚本完成之前,第一个脚本加载的内容不会显示。代码如下所示:Javascript My$(document).ajaxComplete()不';行不通,javascript,jquery,ajax,Javascript,Jquery,Ajax,几天来我一直在使用jQuery和AJAX,我已经走到了死胡同。我正在尝试用AJAX加载一些内容-这部分工作得很好-然后我想执行其他脚本。但是,在第二个脚本完成之前,第一个脚本加载的内容不会显示。代码如下所示: $.ajax({ url : folder, success: function (data) { $(data).find("a").attr("href", function (i, val) {
$.ajax({
url : folder,
success: function (data) {
$(data).find("a").attr("href", function (i, val) {
if( val.match(/\.(jpe?g|png|gif)$/) ) {
var $codeText = "<li class='ui-state-default'><a href='#' data-featherlight='" + folder + val + "'><img src='" + thumbFolder + val + "' data-src='"+ thumbFolder + val + "'/></a></li>";
$("ul[id=sortable]").append($codeText);
$("li").featherlight(folder + val);
};
});
}
})
$(window).ajaxComplete(function(){
console.log("Haba");
var x = 0;
while( x < 50000 )
{
console.log("Haba nr "+x);
x++;
}
$.ajax({
url:文件夹,
成功:功能(数据){
$(数据).find(“a”).attr(“href”),function(i,val){
如果(val.match(/\(jpe?g | png | gif)$/){
var$codeText=“”;
$(“ul[id=sortable]”。追加($codeText);
$(“li”).featherlight(文件夹+val);
};
});
}
})
$(窗口).ajaxComplete(函数(){
控制台日志(“Haba”);
var x=0;
而(x<50000)
{
控制台日志(“Haba nr”+x);
x++;
}
整个代码都被触发了,但在所有控制台消息之后,图像都会显示在网站上。有人建议如何首先显示图片吗?我也尝试了done()和ajaxStop(),仍然没有效果。为什么不在图片加载到ajax调用的success函数后移动要运行的代码,并在加载图片的代码后执行此操作
$.ajax({
url : folder,
success: function (data) {
//Code to load pictures
console.log("Haba");
var x = 0;
while( x < 50000 ) {
console.log("Haba nr "+x);
x++;
}
});
$.ajax({
url:文件夹,
成功:功能(数据){
//加载图片的代码
控制台日志(“Haba”);
var x=0;
而(x<50000){
控制台日志(“Haba nr”+x);
x++;
}
});
我认为它没有按照您希望的方式运行的原因是,ajax调用在收到响应后就完成了。该响应触发ajax调用成功函数中在您的逻辑之前运行的ajax complete函数。此外,按照您编写它的方式,即使您的ajax调用失败,ajax complete逻辑也会启动。我认为您不希望这样。您必须使用ajax的.done()函数来获得异步结果:
var jqxhr=$.ajax(“example.php”)
.完成(功能(数据){
警报(“成功:+数据”);
})
.fail(函数(){
警报(“错误”);
})
.always(函数(){
警报(“完成”);
})尝试使用setTimeout()
函数ajaxDone(){
控制台日志(“Haba”);
var x=0;
而(x<50000)
{
控制台日志(“Haba nr”+x);
x++;
}
}
$(窗口).ajaxComplete(函数(){
设置超时(ajaxDone,1);
});
您正在阻止浏览器执行任何其他操作(例如添加/渲染图像)使用while
循环,我试图找到一种方法,只有在调用完成后才能强制浏览器执行while循环。我的意思是,我仍然必须等到所有执行的代码显示图片。您可以编辑您的问题并添加加载图片的代码吗?以前尝试过,结果相同-所有代码都必须执行,结果相同显示了n张图片。请尝试使用$.post或$.get这更易于使用谢谢,我会尝试,但仍然-我想知道我的代码有什么问题:)
function ajaxDone(){
console.log("Haba");
var x = 0;
while( x < 50000 )
{
console.log("Haba nr "+x);
x++;
}
}
$(window).ajaxComplete(function(){
window.setTimeout(ajaxDone,1);
});