3

ユーザーが特定のリンクをクリックすると、変数を設定する AJAX 呼び出しを実行したいの $_SESSIONですが、ユーザーをリンクのhref.

次のコードを実行すると、Firebug はエラーがあることを示しますが、特定しません。readyState=0, status=0, statusText="error"私が得るすべてですconsole.log

e.preventDefault関数にandwindow.location.href = linkPath;を追加するとsuccess、スクリプトはユーザーを正しい場所に送ります。ただし、phpページが完了するのを待つ間、少し遅れてのみです。

ユーザーを遅滞なくリンクに通過させながら、AJAX 呼び出しを実行するにはどうすればよいですか?

$(document).ready(function() {
$(".example_class").click(function(e) {
    //Stop the page from leaving until we start our ajax
    //e.preventDefault();

    //var linkPath = this.href;

    var form_data = new Object();

    //Set the application ID for insert into the DB
    form_data.variableName = encodeURIComponent('ExampleName');

    //Send the data out to be processed and stored
    $.ajax({
       url:'/mypath/myfile.php',
       type:'POST',
       data:form_data,
       success:function(return_data){
            //window.location.href = linkPath;
            return;
        },
       error:function(w,t,f){
           console.log(w);
           return;
       }
    }); 

    return;
});
});
4

2 に答える 2

1

コメントで述べたように、呼び出し元のページがアンロードされると、ajax 呼び出しは中止されます。ただし、サーバーが呼び出しを受信して​​いないという意味ではなく、サーバーが応答を返していないことを意味するだけです。ajax 呼び出しにかかる時間を最小限に抑えるには、「xhr.onprogress」(jquery の $.ajax には実装されていません) を使用した ajax 呼び出しへの最初の応答を待ってから、リンクを開くことができます。

ただし、サーバーを制御している場合は、'/mypath/myfile.php?redirect_url='+linkPath を次のように linkPath にリダイレクトするだけです。

header('location: '.$_GET['redirect_url']);
于 2012-11-08T22:58:16.190 に答える
0

ajax 呼び出しを行い、ユーザーをリダイレクトします。window.location が変更される前に ajax 呼び出しが送信されます。説明できない唯一のことは、ajax 呼び出しが失敗した場合です。

$(".example_class").click(function(e) {
    var linkPath = this.href; 
    var form_data = new Object();

    //Set the application ID for insert into the DB
    form_data.variableName = encodeURIComponent('ExampleName');

    //Send the data out to be processed and stored
    $.ajax({
       url:'/mypath/myfile.php',
       type:'POST',
       data:form_data,
       success:function(data){ alert('never alerts but request sent to server.'); },
       error:function(){  alert('page changes, but ajax request failed, sorry.'); }
    });
    window.location.href = linkPath;
    return;
});

もう 1 つのオプションは、ajax 呼び出しでonbeforeunload イベントを設定することです。

于 2012-11-08T22:41:00.373 に答える