当前位置: 首页 > 面试题库 >

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

白宏义
2023-03-14
问题内容

我想做的是将加载图像添加到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
});


 类似资料:
  • 问题内容: 这个问题是面向jQuery的,但不一定是排他的。 简短的问题: 同步ajax调用会阻止正常按钮被单击吗? 我的测试表明这没有发生,但也许其他浏览器出了问题。 长的问题: 在我询问的另一个问题中,如何阻止ajax调用(我希望它阻止),这些家伙说浏览器在某些情况下会阻止。 实际上,甚至jQuery 的文档都说: 我正在尝试: 1.了解发生这种情况的方式/原因。 2.评估发生这种情况的可能性

  • 问题内容: 如何在浏览器中的同步ajax调用中显示等待消息?我在下面尝试了代码,关闭了Web服务器,但未显示“正在保存”消息。 一段时间后,只会发生来自ajax调用的错误事件,而没有任何进度消息。 如果正在进行同步Ajax调用,如何向用户显示等待消息? 问题答案: 您的问题是您使用的是同步AJAX调用,并且在浏览器完成之前几乎将其锁定。尤其是,在您按下锁定键之前,浏览器将无法显示您的“正在加载”消

  • 问题内容: 我有JavaScript,它可以执行大量计算以及从DOM中读取/写入值。该页面很大,因此通常会阻塞浏览器长达一分钟的时间(有时使用IE会更长),并且CPU使用率达到100%。 是否有任何资源可以优化JavaScript以防止这种情况发生(我所能找到的就是如何关闭Firefox长期运行的脚本警告)? 问题答案: 如果您可以将计算算法转换为可迭代调用的内容,则可以使用具有短超时值的setT

  • 当使用React-Router时,有什么方法可以防止在浏览器的地址栏中显示?那是ReactJS。也就是说,单击链接转到新路由会显示或。取决于路线。

  • 问题内容: 我的Selenium Webdriver转到页面并等待该页面完成加载。如果30秒过去,它将超时并且脚本失败。 无论如何,是否要让网络驱动程序在30秒后停止页面加载(例如按浏览器中的“ x”)?这样可以防止驱动程序超时。 我正在使用Chromedriver。 问题答案: 这就是我遇到此问题的方式。在chrome支持之前,我将使用这种方式。 我在Chrome中安装了一个名为“停止加载”的扩

  • 我的selenium webdriver转到一个页面,等待该页面完成加载。如果超过30秒,则超时,脚本失败。 是否需要webdriver在30秒后停止页面加载(如按浏览器上的“x”)?这将防止我的司机超时。 我正在使用ChromeDrive。