在(同步)Ajax期间停止浏览器锁定?

我想做的是将加载图像添加到div(以便用户知道正在加载某些内容),然后调用jquery ajax函数,该函数设置为“

async:false”。这是我的代码:

$jQuery("#playersListDiv").html(loadingImage);    

$jQuery.ajax({

type: "POST", /* this goesn't work with GET */

url: urlValue, /*ex: "NBAgetGamesList.php" */

data: parameters, /*ex: "param1=hello" */

cache: false,

async: false,

success: function(data){

}

});

问题在于,浏览器将锁定,并且在ajax调用完成后才追加加载图像,这当然是没有用的。Firefox是唯一实际附加加载图像的浏览器。IE,Chrome和Safari请勿附加正在加载的图片。

我知道浏览器锁定会发生,因为async设置为false,但这是我唯一的选择,因为我需要等待该请求完成才能继续,因为我需要返回的数据。

有没有办法解决?如果我在警报之后添加了可以正常工作的加载图像,但我不想每次都弹出警报。

回答:

尽管你的主张相反你没有 需要 它是同步的。在成功(和/或错误或完成)回调中,可以对响应进行任何处理/在响应之后进行处理。所以改变:

$jQuery("#playersListDiv").html(loadingImage);    

$jQuery.ajax({

...

async: false,

...

});

// OTHER CODE

像这样:

$jQuery("#playersListDiv").html(loadingImage);    

$jQuery.ajax({

...

async: true,

success: function(data) {

// OTHER CODE

}

});

或将“其他代码”移至您从成功回调中调用的单独函数。

如果您需要比这更复杂的东西,则可以将以上内容封装在一个函数中,并向其传递回调:

function doAjaxStuff(callback) {

$jQuery("#playersListDiv").html(loadingImage);

$jQuery.ajax({

...

async: true,

success: function(data) {

// optional other processing here, then:

callback(data);

}

});

}

// then from somewhere else in your code:

doAjaxStuff(function(data) {

// do something with data

});

以上是 在(同步)Ajax期间停止浏览器锁定? 的全部内容, 来源链接: utcz.com/qa/404600.html

回到顶部