【发布时间】:2012-03-18 02:22:45
【问题描述】:
我想要做的是将加载图像附加到 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,但这是我唯一的选择,因为我需要等待此请求完成才能继续,因为我需要返回的数据。
有没有办法解决这个问题?如果我在添加有效的加载图像之后发出警报,但我不希望每次都弹出警报。
【问题讨论】:
-
同步,顾名思义,就是“阻塞”。它对浏览器的影响各不相同,但通常会阻止 DOM 更新和交互。使其异步“修复”问题。
-
为什么不让它异步,然后把代码放在一个单独的函数中运行。然后调用返回码中的函数?
-
"因为我需要返回的数据。"这就是回调的用途。您的代码不必是线性的。
-
@Bob 在这之后放了什么代码? Epacscarello,有一个回调函数。在这种情况下,它确实需要是线性的,因为我正在等待数据,然后我在下一个代码块中使用该数据。
-
@Ray - 他们在说什么(如我的回答所示)是您可以将整个下一个代码块移动到成功回调中,或者将其放入您调用的单独函数中从成功回调中,然后该块可以使用返回的数据。
标签: javascript jquery ajax synchronous