我有一个名为save的功能:
function save(callback){
var ed=tinyMCE.get('body');
var data=ed.getContent();
$('#saving').show();
$('#save_err').hide();
$.post('/article/ajax/save',{title:$('#title').val(),body:data,token:token,aid:<?php echo $article_id; ?>},function(d){
$('#saving').hide();
if(d.suc==1){
$('#saved').show();
setTimeout(function(){$('#saved').hide()},2000);
}else{
$('#save_err').html(d.err).show();
}
return true;
},"JSON");
};
单击#preview元素时,我希望执行save,并在函数完成后重定向。
$('body').on('click','#preview',function(){
save(function(){
window.open('/article/preview/<?php echo $article_id; ?>','_blank');
});
});
我已经使用了这里接受的答案和最高评价的答案,但都没有奏效。重定向发生在函数完成之前。 Execute jquery function after another function completes
我也尝试过:
$('body').on('click','#preview',function(){
$.when(save()).done(function(){
window.open('/article/preview/<?php echo $article_id; ?>','_blank');
});
});
我做错了什么?
答案 0 :(得分:1)
在以下方法的背景下
$('body').on('click','#preview',function(){
save(function(){
window.open('/article/preview/<?php echo $article_id; ?>','_blank');
});
});
您需要调用您作为参数传递的回调方法。
function save(callback){
$.post(url,function(d){
$('#saving').hide();
if (d.suc == 1) {
$('#saved').show();
setTimeout(function () {
$('#saved').hide();
//CALL THE METHOD
callback();
}, 2000);
} else {
$('#save_err').html(d.err).show();
}
},"JSON");
};
答案 1 :(得分:1)
您永远不会调用回调函数,因此它永远不会重定向。你需要在超时结束时调用它:
function save(callback) {
var ed = tinyMCE.get('body');
var data = ed.getContent();
$('#saving').show();
$('#save_err').hide();
$.post('/article/ajax/save', {
title: $('#title').val(),
body: data,
token: token,
aid: <? php echo $article_id; ?>
}, function (d) {
$('#saving').hide();
if (d.suc == 1) {
$('#saved').show();
setTimeout(function () {
$('#saved').hide();
callback(); // <---- call callback
}, 2000);
} else {
$('#save_err').html(d.err).show();
}
}, "JSON");
};