1

我的表单中有一个按钮(不是提交),它触发了 AJAX 调用。我希望页面之后重新加载并反映新状态(由 AJAX 调用修改)。success:AJAX 调用工作正常,除非我尝试在回调函数的末尾添加重定向。当重定向在回调中工作时,页面重定向并且 AJAX 调用没有效果。

似乎重定向正在“中断” AJAX 调用而不是让它发生,但这让我感到困惑。我认为success:回调仅在拨打电话后发生。那么回调函数中的事情怎么会干扰应该已经发生的事情呢?

这是一些 HTML:

    <a href="http://example.dev/my-file-delete" id="deleteresume">Delete file</a>           

这是我的javascript:

    var deleteresume = function(event) {
        event.preventDefault();
        $.ajax({
            type: "POST",
            url: "<?php echo $link_to_delete; ?>",
            success: hideresumefile( event.target )
        });

    }
    $("#deleteresume").click( deleteresume );
    var hideresumefile = function( target ) {
        $(target).closest('div').css('display', 'none');
        //THIS IS THE PROBLEM...
        $(location).attr('href', 'http://example.dev/handler.php');
    }

我尝试了许多重定向的变体,例如:

window.location.replace("url");
window.location.href = "url";
location.reload(true);
window.location.reload(true);
location.href('url');
window.location.href('url');

当这些工作时,AJAX 调用不起作用。我错过了什么?

4

2 回答 2

2
success: hideresumefile( event.target )

您没有传递函数,而是在此处调用它。这意味着您的hideresumefile函数将在 AJAX 调用之前实际运行......

success必须是一个函数,为了保持相同的功能,你可以使用:

success: function () {
    hideresumefile( event.target );
}

因此,您将函数调用包装在另一个函数中,该函数仅定义,未调用。只有在 AJAX 操作成功时才​​会调用它。

于 2013-03-06T21:46:10.813 回答
0

将您的 hideresumefile 调用包装在一个函数中。

var deleteresume = function(event) {
    event.preventDefault();
    $.ajax({
        type: "POST",
        url: "<?php echo $link_to_delete; ?>",
        success: function(result) { hideresumefile( event.target ); }
    });
}

$("#deleteresume").click( deleteresume );

var hideresumefile = function( target ) {
    $(target).closest('div').css('display', 'none');
    $(location).attr('href', 'http://example.dev/handler.php');
}
于 2013-03-06T21:57:25.583 回答