2009-07-16 4 views
2

Ich schreibe Code in PHP, die Benutzereingaben analysiert. Ich hoffe, es über eine AJAX-Anfrage mit jquery zu analysieren. Ich möchte dem Benutzer in Echtzeit Feedback geben, während ich die Berechnungen vorbereite. Zum Beispiel: "Upload Ihrer Eingabe", "Analyse", "Vorbereitung Endergebnis" und so weiter. Wie kann ich damit umgehen?inform Benutzer während der PHP-Berechnung w/jquery

Antwort

1

Sie müssen ein anderes Backend-Skript verwenden als die, an die Sie Ihre Anfrage senden. Ihre ursprüngliche Ajax-Anfrage kann die zu analysierende Benutzereingabe speichern, und ein anderer Prozess prüft, ob neue Daten regelmäßig bearbeitet werden, und beginnt mit der Arbeit, wenn sie etwas findet. Dieser Hintergrundprozess kann dann seinen Fortschritt aufzeichnen, z. Verwenden einer Datei oder einer Datenbank.

Die nachfolgenden Ajax-Anforderungen überprüfen diese Fortschrittsdatei oder den Datenbankeintrag und zeigen den Fortschritt dem Benutzer an.

Eine andere (kompliziertere) Lösung wäre die Verwendung von Comet, um Informationen über den Status vom Server zum Browser zu übertragen. Es gibt ein Comet-Plugin für JQuery in Arbeit, wie in StackOverflow question 136012 beschrieben.

1

Angenommen, Sie haben einen Dienst unter /service-status.php, der den Status des Jobs überprüft und eine Zeichenfolge zurückgegeben hat, können Sie in einem Intervall so etwas tun.

var intervalId; 
intervalId = setInterval(function() { 
    $.ajax({ 
     type: "POST", 
     url: "/service-status.php", 
     data: "jobid=" + id, 
     success: function(msg){ 
     if (msg === 'Finished') { 
      clearInterval(intervalId); 
     } 
     alert("Status: " + msg); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
      alert("He's dead Jim"): 
      clearInterval(intervalId); 
     } 

    }) 
}, 500); 

Dies würde Ihren Dienst alle 500ms abfragen. Es wird außerdem davon ausgegangen, dass Sie "Fertig" zurückgeben, wenn Sie fertig sind. Dementsprechend anpassen. Ich könnte auch einen Zähler hineinstellen, um das Intervall zu löschen, nur für den Fall, dass Sie nicht Ihren eigenen Server DDOS.

Verwandte Themen