仅限Chrome:ajax冻结了我的JavaScript执行

Chrome only : ajax freezing my javascript execution

本文关键字:我的 JavaScript 执行 结了 冻结 Chrome ajax 仅限      更新时间:2024-05-16

Ajax的意思是异步的,但它似乎停止了我的javascript执行,或者至少暂停它并在响应时恢复。

网页值

 <input value="foo" data-loading-text="bar" class="foo">

扩展 jquery -->

$.fn.bootstrapButton= function(type){
    $el = $(this);
    loadingText = $el.attr("data-loading-text");
    currentValue = $el.val();
    if(type === "loading")
      $el.attr("data-loading-text",currentValue)
        .val(loadingText)
        .prop("disabled", true)
    else if( type === "reset")
      $el.val(loadingText)
        .prop("disabled", false)
        .attr("data-loading-text", currentValue)
}

函数调用 -->

save= function (name){
  $save = $(".ok")
  $save.bootstrapButton("loading")
  $.ajax({
    type: 'POST'
    url: '/server'
    cache: false
    dataType: 'json'
    data:"ss"
    success: function(response){
       alert("success")
    }).always(function(){
    $save.bootstrapButton("reset")
  })
}

我正在扩展引导程序的按钮,因为jquery UI的按钮问题。但是 - 当这正在执行时,在 ajax 请求完成之前,我永远不会看到加载文本!!大常见问题!异步不是真正的异步吗?

顺便说一句,通过这个小的修改,代码可以正常工作(我可以看到加载文本(。

save= function (name){
  $save = $(".ok")
  $save.bootstrapButton("loading")
  setTimeout(funtion(){
    $.ajax({
      type: 'POST'
      url: '/server'
      cache: false
      dataType: 'json'
      data:"ss"
      success: function(response){
         alert("success")
      }).always(function(){
      $save.bootstrapButton("reset")
    })
  },100)
}

即,以 100 毫秒的延迟,加载文本出现!,什么给出?

结构:

$.ajax({
.... 
}).always(function(){
    $save.bootstrapButton("reset")
  })

说:"执行这个 Ajax 命令,完成后始终运行这个匿名函数。

所以你已经明确地说,"等到Ajax调用完成",它正在工作。

在我的 ajax 查询中添加以下内容作为选项解决了这个问题。

异步:真