1

フォーム(送信ではない)にAJAX呼び出しをトリガーするボタンがあります。後でページをリロードして、新しい状態を反映させたい(AJAX呼び出しによって変更された)。コールバック関数の最後にリダイレクトを追加しようとしない限り、AJAX呼び出しは正常に機能しsuccess:ます。コールバックでリダイレクトが機能している場合、ページはリダイレクトされ、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 に答える