其他功能完成后,Javascript执行函数

时间:2015-06-02 20:32:05

标签: javascript jquery ajax function

我有一个名为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');
    });
});

我做错了什么?

2 个答案:

答案 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");
};