jQuery:在ajax调用完成之前不会执行函数

时间:2010-11-03 08:47:16

标签: jquery function sequence

我的网站上有一个TinyMCE textarea。当我点击“保存”按钮时,函数save();叫做。它应该在保存时锁定TinyMCE编辑器(假设save.php需要几秒钟才能加载)。即使formProgress(1)是我的save()函数中的第一行代码,它也不会立即执行。编辑器在ajax调用完成后暂时被锁定了一会儿。任何人都知道如何解决这个问题?

function save()
{
 formProgress(1); //why won't this be executed right away? for some reason i can see the result of this only when the ajax call is complete?!
 jQuery.ajax({
  url: 'save.php',
  type: 'POST',
  data: 'html=' + $('textarea[name=content_html]').tinymce().getContent(),
  completed: function() { formProgress(0); },
  async : false
 });
}

function formProgress(mode)
{
  if(mode == 1)
  {
    $('textarea[name=content_html]').tinymce().setProgressState(1);
  }
  else
  {
    $('textarea[name=content_html]').tinymce().setProgressState(0); 
  }
}

3 个答案:

答案 0 :(得分:3)

立即完成,问题在于:

async : false

async: false的工作方式会锁定您的浏览器,所以尽管之前的所有内容发生在......之前......但您的用户界面被锁定并赢了不会更新,直到XmlHttpRequest完成。

这是的主要原因之一,尽可能使用async: false

答案 1 :(得分:0)

setProgressState方法接受出现的时间延迟作为参数。

这意味着它用setTimeout调用,所以这可以解释为什么代码移动到下一行时尚未显示..(ajax调用)

答案 2 :(得分:0)

使用settimeout例如

异步尝试此函数调用
function save()
{
    setTimeout("formProgress(1)",1000);
    // AJAX call
}