2010-11-03 73 views
0

我的网站上有一个TinyMCE textarea。当我点击“保存”按钮时,函数save();叫做。它应该在保存时锁定TinyMCE编辑器(假设save.php需要几秒钟才能加载)。尽管formProgress(1)是我的save()函数中的第一行代码,但它不会立即执行。在ajax调用完成后,编辑器会被锁定一段时间。任何人都知道如何解决该问题?jQuery:函数将不会执行,直到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

确实完整往右走,问题就在这里:

async : false 

方式async: false工作锁定您的浏览器,所以虽然一切之前不会之前发生.. ..但是你的用户界面被锁定,直到XmlHttpRequest完成后才会更新。

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

+0

很棒,thx很多队友!我将async改为true。不过,我还必须将formProgress(0)函数更改为“成功”事件。如果我把它留给“完成”事件,它不知何故将不会发射。 – columbia 2010-11-03 10:31:20

0

setProgressState方法接受为参数延时出现。

这意味着,它被称为一个setTimeout所以这可以解释为什么它没有被当代码移动到下一行显示。(Ajax调用)

0

使用异步试试这个函数调用settimeout例如

function save() 
{ 
    setTimeout("formProgress(1)",1000); 
    // AJAX call 
} 
+1

反正这不是问题,但不要传递字符串到'setTimeout',如果你需要参数,使用匿名函数,如果你不需要函数名,就使用:setTimeout(function(){formProgress( 1);},1000);' – 2010-11-03 10:06:53

相关问题