2017-11-22 7 views
-1

こんにちは私は、ajaxリクエストからの応答が受信された場合にリダイレクトを試みています。しかし、何らかの形でwindows.href.locationは、PHPバックグラウンドプロセスが処理を完了するまでリダイレクトされません。以下は、私のコードは応答の直後にJavascriptがリダイレクトされない

// The php script that run the background process 
<?php 
    $background = new BackgroundProcess('email.php'); 
    $background->run(); // The background process is running now 
    return $background->getPid(); // This returns immediately to the frontend 
?> 

であり、これはjQueryの今は今、コンソール上プリントをリダイレクト行わ

$.ajax({ 
    url: '/payment', 
    data:form.serialize(), 
    dataType: 'json', 
    success: function(txt){ 
     if (txt.response == "ok"){ 
      console.log("done redirecting now"); 
      window.location.href = "/confirmation"; 
     }else{ 
      alert("failed process"); 
     } 
    }, 
    type: 'POST' 
}); 

を使用して、私のAJAX要求です。応答が受信されたことを意味します。しかし、私はwindows.hrefの次の行を実行することを期待していますが、これは私のPHPスクリプトのバックグラウンドプロセスが完了するまで実行されません。どのようにこれを解決するための任意のアイデアですか?

注:そのJavaScriptのリダイレクトがすぐにリダイレクトしていないとすぐにリダイレクトが発生しないwindow.location.hrefに割り当て

+0

そのコードがコールバックで実行されると、PHPスクリプト*は完了し、呼び出される 'success'ハンドラ関数の応答を送信しなければなりません。 AJAXリクエストに起因する奇妙な振る舞いではなく、新しいページの読み込みが遅れている可能性が高いようです。 –

+0

これは私が以前考えたことですが、すべてのバックグラウンドプロセスがリダイレクトが有効になるプロセスで完了するとすぐにです。私はこのプロセスのために100の電子メールを送信しており、私はdbの進捗状況を記録しています。したがって、ページがリダイレクトされているときにdb内のプロセスを完了すると、 –

+0

そのプロセスが本当に集中しているとサーバー負荷の問題が発生する可能性があります。 – charlietfl

答えて

-1

を完了するために、PHPスクリプトを待っているだけのことを、効果を期待通りにPHPプロセスが実行されていますJavascriptがメインイベントループに戻るときにのみ表示されます。これにより、リダイレクトする前に追加の処理を行うことができます。リダイレクト先を変更するなど、場所を再割り当てすることもできます。例えば。これは、以前の割り当てが上書きされますので、

window.location.href = "/page1"; 
window.location.href = "/page2"; 

は、/page2にリダイレクトされます。

+0

これは動作しません。 –

+0

私はそれをテストして、2番目のURLにリダイレクトしようとしました。それはどうしたらうまくいかないのですか? – Barmar

+0

申し訳ありません、多分私は私の質問をかなり明確にしませんでした。私はリダイレクトをajax呼び出しの後にテストしています。このajaxをPHPスクリプトに呼び出すと、バックグラウンドプロセスが起動します。応答を返すとすぐにはリダイレクトされず、リダイレクトを続けるためにバックグラウンドプロセスが終了するのを待たなければなりませんでした。 –

関連する問題