Warum wird die () am Ende der Funktion verwendet, die eine Ajax-Anforderung verarbeitet?

9

Was kann schief gehen, wenn ich die();nach der Funktion, die eine Ajax-Anfrage verarbeitet, nicht verwende?

Ich habe festgestellt, dass fast der gesamte WordPress Ajax-basierte Code ihn verwendet.

Latheesh VM Villa
quelle

Antworten:

17

Wenn Sie dies nicht tun die, wird die Ausführung fortgesetzt und möglicherweise eine zusätzliche Ausgabe generiert, die möglicherweise alle Informationen beschädigt, die Sie vom Server an den Browser senden möchten. Genau genommen müssen Sie das vielleicht nicht die, aber es macht wenig Sinn, das Risiko einzugehen.

Allgemeiner ausgedrückt zeigt WordPress Ajax sein Alter und den Mangel an Erfahrung bei der Arbeit mit Ajax, als es entwickelt wurde. Sie sollten stattdessen die WordPress-JSON-Routen verwenden, da diese eine bessere URL-Struktur haben können und die Programmierstruktur logischer und modularer ist.

Mark Kaplun
quelle
Danke für die Antwort. Ein wenig verwirrt mit zusätzlicher Ausgabe. Wenn keine Daten von der Anforderung abgerufen werden, wie wird zusätzliche Ausgabe generiert? Addiert es auch die Serverressourcen?
Latheesh VM Villa
weil WordPress weiterhin läuft und versucht, mit der URL umzugehen. Wenn die Ausführung Plugins auslöst, die den Kontext, in dem ihr Code ausgeführt wird, nicht ordnungsgemäß überprüfen, erhalten Sie möglicherweise eine Ausgabe (höchstwahrscheinlich ein PHP-Fehler, wenn sie nur in einem anderen Kontext aufgerufen werden sollen)
Mark Kaplun
1
admin-ajax.php Fügt immer eine Ausgabe hinzu, wenn die Anforderung nicht gestoppt wird. dieWenn der Aufrufer des AJAX die Ausgabe nicht ignoriert, ist dies grundsätzlich erforderlich, auch wenn der Wrapper wp_diebevorzugt werden sollte, da eine Funktion, die enthält, dieso gut wie unmöglich zu testen ist.
gmazzap
tnx @gmazzap, es ist lange her, dass ich mir die Details dieses Codes angesehen habe
Mark Kaplun
Beachten Sie, dass wp_die auch von anderen Plugins (über wp_die_ajax_handler) eingebunden werden kann. Niemand möchte die oder exit verwenden, aber wenn Sie ein Plugin veröffentlichen, besteht die Gefahr von Konflikten, wenn Sie dies nicht tun. Ich kümmere mich sogar um meine eigene Ausgabepufferung aufgrund von Themen und Plugins, die während der Ausführung Junk-Ausgaben erzeugen.
Tim
0

WordPress sollte dies nicht erfordern und deutet auf schlechte Codierungspraktiken hin.

Wenn Sie eine Ajax-Anfrage stellen, sollte die angeforderte URL eine Antwort mit den erforderlichen Daten generieren (und auch die richtigen Header festlegen, um anzugeben, um welchen Datentyp es sich handelt, z. B. JSON). In der Antwort sollte nichts anderes als die erforderliche Ausgabe angegeben werden.

Ich arbeite die ganze Zeit mit PHP und JavaScript - obwohl ich kein WordPress-Entwickler bin - und war amüsiert über den Titel dieser Frage. Wenn WordPress das tut, ist das schrecklich. Wie in der akzeptierten Antwort angegeben, ist dies wahrscheinlich eine Möglichkeit, zu verhindern, dass weitere Ausgaben in die Antwort aufgenommen werden. Aber natürlich sollte diese "weitere Ausgabe" niemals Teil der Antwort sein.

Andy
quelle
3
Hallo Andy, und willkommen hier! In Bezug auf Ihre Antwort besteht die Best Practice von WP für AJAX darin, admin-ajax.php als Endpunkt der Anforderung zu verwenden. Diese Datei fügt buchstäblich immer eine Ausgabe hinzu, wenn sie nicht gestoppt wird (siehe github.com/WordPress/WordPress/blob/master/wp) -admin /… ) Wenn Sie also JSON von einem Rückruf ausgeben und nicht aufrufen die(oder umschließen wp_die), fügt WP ein hinzu "0", das den JSON beschädigt und das korrekte Parsen durch den Aufrufer verhindert (wahrscheinlich js). Also, ja, ich stimme zu, dass man in einer gut entwickelten Anwendung nicht sterben muss; in WordPress andererseits ...
gmazzap
@gmazzap ja, als ich mit Ajax arbeitete, bemerkte ich, dass "0" addiert wurde, wenn nicht wp_die
Latheesh VM Villa
"schrecklich" zu sein ist keine sehr nützliche Beschreibung. Es gibt viele schreckliche Dinge in jedem Code, die es schon mehr als eine sehr triviale Zeit gegeben hat. Kein Code ist jemals perfekt. Wenn Sie nur perfekten Code verwenden möchten, müssen Sie alles selbst schreiben, beginnend mit dem CPU-Mikrocode
Mark Kaplun
Ich versuche, Menschen zu erziehen, indem ich die Frage richtig beantworte. Die Verwendung die()ist nicht erforderlich und würde in einer gut geschriebenen PHP-Anwendung niemals vorkommen. Analogien des CPU-Codes sind irrelevant und zeigen einen völligen Mangel an Verständnis. Vielleicht ist Ihre Definition von "schrecklich" und meine unterschiedlich. Ich benutze WP nicht, weil es mit so einem Unsinn übersät ist. Ich codiere (richtig) die ganze Zeit in PHP und versuche aus PHP-Sicht zu helfen. Sie können entweder akzeptieren, dass WP dies - und viele andere Dinge - völlig falsch verstanden hat. Da dies ein WP-Stack ist, fällt es den Fans wohl schwer.
Andy
Nun, jede Software und Plattform hat ihre Nachteile. Es gibt keine Lösungen, nur Kompromisse.
Jesús Franco