2017-11-22 5 views
-1

Hallo Ich versuche, eine Weiterleitung zu tun, wenn eine Antwort von einer Ajax-Anfrage erhalten wird. Aber irgendwie wird die windows.href.location nicht umleiten, bis der PHP-Hintergrundprozess bei der Verarbeitung abgeschlossen ist. Unten ist mein CodeJavascript wird nicht sofort nach Antwort umgeleitet

// 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 
?> 

Und das ist meine Ajax-Request jquery mit

$.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' 
}); 

Nun ist die jetzt druckt auf der Konsole Umleitung fertig. Bedeutung eine Antwort erhalten wurde. Aber ich erwarte, die nächste Zeile auszuführen, die windows.href ist, aber das wird nicht ausgeführt, bis der Hintergrundprozess in meinem PHP-Skript abgeschlossen ist. Irgendeine Idee, wie man das löst?

Hinweis: Der PHP-Prozess ausgeführt wird seine ebenso erwartet, dass die JavaScript-Weiterleitung nicht sofort umleiten und wird für den PHP-Skript wartet

+0

Vorausgesetzt, dass dieser Code im Callback ausgeführt wird, muss das PHP-Skript * die Antwort abgeschlossen und gesendet haben, damit die 'success' -Handlerfunktion aufgerufen wird. Es scheint wahrscheinlicher, dass es beim Laden der neuen Seite eher eine Verzögerung gibt als ein seltsames Verhalten, das sich aus der AJAX-Anfrage ergibt. –

+0

Das ist, was ich vorher dachte, aber sobald der gesamte Hintergrundprozess mit dem Prozess abgeschlossen ist, in dem die Umleitung wirksam wird. Ich führe eine 100-E-Mail-Versand für diesen Prozess und ich protokolliere den Fortschritt in meiner Datenbank. Also nach Abschluss des Prozesses in der db, wenn die Seite umleitet –

+0

Möglicherweise ein Server-Ladeproblem, wenn dieser Prozess wirklich intensiv ist – charlietfl

Antwort

-1

Zuordnung zu window.location.href nicht verursacht eine sofortige Umleitung, um die Wirkung zu beenden wird nur angezeigt, wenn Javascript zur Hauptereignisschleife zurückkehrt. Auf diese Weise können Sie vor der Weiterleitung zusätzliche Verarbeitungsschritte ausführen, einschließlich der Neuzuweisung des Standorts, an dem Sie umleiten möchten. Z.B.

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

wird /page2, umleiten, weil dies die frühere Zuordnung außer Kraft setzt.

+0

Das funktioniert nicht. –

+0

Ich habe es gerade getestet, und es hat versucht, auf die zweite URL umzuleiten. Was ist damit nicht? – Barmar

+0

Entschuldigung, vielleicht habe ich meine Frage nicht klargestellt. Ich teste die Umleitung nach einem Ajax-Anruf. Dieser Ajax-Aufruf an ein PHP-Skript löst einen Hintergrundprozess aus. Nachdem eine Antwort zurückgegeben wurde, wird sie nicht sofort umgeleitet, und sie musste warten, bis der Hintergrundprozess beendet ist, um die Umleitung fortzusetzen. –

Verwandte Themen