我的网站上有一个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);
}
}
答案 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
}