Heim  >  Artikel  >  Backend-Entwicklung  >  javascript - Wie kann man erreichen, dass das angeforderte PHP ebenfalls beendet wird, nachdem die Ajax-Anfrage beendet wurde? ?

javascript - Wie kann man erreichen, dass das angeforderte PHP ebenfalls beendet wird, nachdem die Ajax-Anfrage beendet wurde? ?

WBOY
WBOYOriginal
2016-09-08 08:43:531443Durchsuche

Ich habe eine Webversion der Suchfunktion erstellt.

javascript - Wie kann man erreichen, dass das angeforderte PHP ebenfalls beendet wird, nachdem die Ajax-Anfrage beendet wurde? ?

Die Suche wird von der Rezeption initiiert, die Suche wird im Hintergrund ausgeführt und die Suchergebnisse werden zurückgegeben.

Wenn ich auf eine Ordnersuche stoße und der Ordner viele Dateien enthält (mehr als 20.000), ist die Suchzeit sehr lang (es dauert etwa 2 Minuten, bis ich die Ergebnisse erhalte). Also klicke ich einfach, um die Suche zu beenden.

<code>  // 终止搜索
  stopSearch: function(){
    console.log('xhr请求集合: ' , this.reqList);
    for (var i = 0; i < this.reqList.length; ++i)
      {
        if (this.reqList[i].readyState !== 0 || this.reqList[i].status !== 200) {
          this.reqList[i].abort();
        }
      }
  } 
  </code>

Nachdem Sie auf „Stoppen der Suche“ geklickt haben, wird die Rezeption tatsächlich gestoppt:

javascript - Wie kann man erreichen, dass das angeforderte PHP ebenfalls beendet wird, nachdem die Ajax-Anfrage beendet wurde? ?

Aber das PHP-Skript im Hintergrund läuft immer noch (und ich habe die maximale Ausführungszeit des PHP-Skripts auf 3 Minuten festgelegt. Es dauert immer noch relativ lange (mehr als 1 Minute). Ehrliche Situation (nur einer wird initiiert), wenn die Maus während des Vogelfeuers wild klickt, dann muss ich wahrscheinlich den Server neu starten ... Seufz (das Folgende sind die Folgen des verrückten Klickens, nur zwei oder drei Klicks, die längste Anfrage Zeit erreicht 5 Minuten...)!

javascript - Wie kann man erreichen, dass das angeforderte PHP ebenfalls beendet wird, nachdem die Ajax-Anfrage beendet wurde? ?

Gibt es eine Möglichkeit, die Ausführung des Hintergrund-PHP-Skripts zu beenden, wenn die Anfrage gestoppt wird? ?

Antwortinhalt:

Ich habe eine Webversion der Suchfunktion erstellt.

javascript - Wie kann man erreichen, dass das angeforderte PHP ebenfalls beendet wird, nachdem die Ajax-Anfrage beendet wurde? ?

Die Suche wird von der Rezeption initiiert, die Suche wird im Hintergrund ausgeführt und die Suchergebnisse werden zurückgegeben.

Wenn ich auf eine Ordnersuche stoße und der Ordner viele Dateien enthält (mehr als 20.000), ist die Suchzeit sehr lang (es dauert etwa 2 Minuten, bis ich die Ergebnisse erhalte). Also klicke ich einfach, um die Suche zu beenden.

<code>  // 终止搜索
  stopSearch: function(){
    console.log('xhr请求集合: ' , this.reqList);
    for (var i = 0; i < this.reqList.length; ++i)
      {
        if (this.reqList[i].readyState !== 0 || this.reqList[i].status !== 200) {
          this.reqList[i].abort();
        }
      }
  } 
  </code>

Nachdem die Suche gestoppt wurde, hat die Rezeption tatsächlich aufgehört:

javascript - Wie kann man erreichen, dass das angeforderte PHP ebenfalls beendet wird, nachdem die Ajax-Anfrage beendet wurde? ?

Aber das Hintergrund-PHP-Skript läuft noch (und ich habe die maximale Zeit für die Ausführung des PHP-Skripts auf 3 Minuten festgelegt. Es dauert immer noch relativ lange (mehr als 1 Minute). Ehrliche Situation (nur einer wird initiiert), wenn die Maus während des Vogelfeuers wild klickt, dann muss ich wahrscheinlich den Server neu starten ... Seufz (das Folgende sind die Folgen des verrückten Klickens, nur zwei oder drei Klicks, die längste Anfrage Zeit erreicht 5 Minuten...)!

javascript - Wie kann man erreichen, dass das angeforderte PHP ebenfalls beendet wird, nachdem die Ajax-Anfrage beendet wurde? ?

Gibt es eine Möglichkeit, die Ausführung des Hintergrund-PHP-Skripts zu beenden, wenn die Anfrage gestoppt wird? ?

Nein, Sie können lediglich Ihre Suchleistung optimieren

Der einzige Weg, damit anzufangen, ist die Optimierung der Suchleistung. Das HTTP-Protokoll verfügt nicht über eine „Anfrage“, um eine Anforderungsbeendigung im Hintergrund zu initiieren, und wenn der Front-End-Server Nginx verwendet, weiß der PHP-Anwendungsserver nicht einmal, dass der Client die Verbindung getrennt hat.
In diesem Fall können Sie nur mit dem Optimierungshintergrund beginnen.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn