Javascript 如何在完成AJAX过程之前防止所有链接重定向
我有一个使用tinyMCE的应用程序。在此页面中,用户将编写一条消息,然后在另一个页面上预览它(不使用tinyMCE的预览)。我目前有一个AJAX功能,当用户从tinyMCE UI点击时,它会保存内容。问题是,我在同一个页面上有不同类型的链接,有时当用户单击链接时,AJAX函数无法在重定向之前保存内容,从而导致预览空白或消息未保存Javascript 如何在完成AJAX过程之前防止所有链接重定向,javascript,ajax,tinymce,Javascript,Ajax,Tinymce,我有一个使用tinyMCE的应用程序。在此页面中,用户将编写一条消息,然后在另一个页面上预览它(不使用tinyMCE的预览)。我目前有一个AJAX功能,当用户从tinyMCE UI点击时,它会保存内容。问题是,我在同一个页面上有不同类型的链接,有时当用户单击链接时,AJAX函数无法在重定向之前保存内容,从而导致预览空白或消息未保存 <div> <textarea id='msg'></textarea> <a id='preview'>Previe
<div>
<textarea id='msg'></textarea>
<a id='preview'>Preview</a>
<a id='other_page'>Other Page</a>
<a id='another_page'>Another Page</a>
</div>
预览
其他页面
另一页
下面是JavaScript处理程序和函数
<script>
// INITIALIZE TINYMCE
tinyMCE.init({
// SAVE CONTENT ON BLUR
editor.on('blur', function() { save_message(this); });
})
function save_message(){
var msg= tinyMCE.get('msg ').getContent();
$.ajax({
statusCode : { 404: function(){alert('Not Found');} },
type : 'post',
data : {msg:msg},
url : '<script_that_handles_save>',
success : function(res){ // DO SOMETHING }
});
}
// WHEN PREVIEW IS CLICKED
$('a.preview).click(function(){
save_message();
});
$('a.other_page).click(function(){
save_message();
});
$('a.another_page).click(function(){
save_message();
});
</script>
//初始化TINYMCE
tinyMCE.init({
//在BLUR上保存内容
on('blur',function(){save_message(this);});
})
函数save_message(){
var msg=tinyMCE.get('msg').getContent();
$.ajax({
状态代码:{404:function(){alert('notfound');},
键入:“post”,
数据:{msg:msg},
url:“”,
成功:函数(res){//DO SOMETHING}
});
}
//单击预览时
$('a.preview)。单击(函数(){
保存消息();
});
$('a.other_页)。单击(函数(){
保存消息();
});
$('a.另一页)。单击(函数(){
保存消息();
});
您可以创建某种标志变量,它将告诉您是否应该阻止链接重定向。在发送保存消息的AJAX请求之前,将此变量设置为true
,请求成功后将其设置回false
。还要在所有链接上设置一个事件侦听器,它将检查此标志变量,如果它等于true
,则阻止重定向
示例代码:
var linksDisabled = false;
function save_message() {
linksDisabled = true;
$.ajax({
success: function() {
linksDisabled = false;
}
// some other options
})
}
$("a").click(function(event) {
if (linksDisabled) {
event.preventDefault();
}
});
有几件事,您的
save_message()
函数是一个AJAX调用,需要完成并发送回响应才能正常工作。当您单击锚定标记时,会调用函数(根据上面的代码),但在函数返回响应之前页面会重定向。
另外,似乎您正在为每个锚定标记冗余地调用函数,为什么不为所有锚定标记调用一次函数,例如a.click(function(){//your function here})代码>
您的代码逻辑很好,只需重新构造并简化它,如下所示:
tinyMCE.init({
// SAVE CONTENT ON BLUR
editor.on('blur', function() { save_message(this); });
})
$('a').click(function(e){
// prevent the redirect
e.preventDefault();
var msg= tinyMCE.get('msg ').getContent();
var location = $(this).attr('href');
// execute ajax
$.ajax({
statusCode : { 404: function(){alert('Not Found');} },
type : 'post',
data : {msg:msg},
url : '<script_that_handles_save>',
success : function(res){
// redirect on success
window.location.href = location
}
});
});
tinyMCE.init({
//在BLUR上保存内容
on('blur',function(){save_message(this);});
})
$('a')。单击(函数(e){
//防止重定向
e、 预防默认值();
var msg=tinyMCE.get('msg').getContent();
变量位置=$(this.attr('href');
//执行ajax
$.ajax({
状态代码:{404:function(){alert('notfound');},
键入:“post”,
数据:{msg:msg},
url:“”,
成功:功能(res){
//成功时重定向
window.location.href=位置
}
});
});
对不起,我对这些措辞有点困惑。您是否尝试过在$.ajax函数的成功处理程序中使用JS重定向,而不是依赖默认的锚定链接功能?linksDisabled变量如何连接到我的锚定标记?