Ich versuche, ein einfaches TODO-Plugin mit Backbone zu erstellen, und bin auf ein Problem mit der AJAX-API gestoßen. Um den richtigen AJAX-Rückruf zu erhalten, müssen Sie den Parameter "action" wie folgt übergeben:
admin-ajax.php? action = get_todos
Dies funktioniert gut für die GET-Methode in Backbone. Bei Verwendung von DELETE Backbone wird jedoch standardmäßig eine URL wie die folgende verwendet:
admin-ajax.php? action = get_todos / 9
Dabei ist "9" die ID der zu löschenden Aufgabe. Durch Hinzufügen dieser ID wird der AJAX-Aufruf auf der WordPress-Seite unterbrochen. Ich kann die URLs für jede der Methoden manuell überschreiben, möchte aber wissen, ob es eine elegantere Möglichkeit gibt, die AJAX-API für die Arbeit mit Backbone zu verwenden.
Ich habe ein Demo-Plugin erstellt, das das spezifische Problem zeigt, auf das ich gestoßen bin. Laden Sie die Einstellungsseite und klicken Sie auf eines der X, während Sie Ihren Netzwerkinspektor beobachten, um die 0-Wert-AJAX-Ergebnisse von WordPress anzuzeigen.
https://github.com/hereswhatidid/wordpress-todo-backbone-demo
Antworten:
Sie müssen die
Backbone.sync
Funktion überschreiben , um die für den AJAX-Aufruf verwendete URL zu ändern. Sie können vom Plugin lernen, dass wp-backbone dies und mehr tut. Unten sehen Sie, wie alle Aktionen in entwederPOST
oder geändert werdenGET
, erstellen Sie die Parameter, fügen Sie denaction
Parameter hinzu und vieles mehr.quelle
Sie müssen nicht überschreiben,
Backbone.sync
da Backbone.sync seine eigene $ .ajax-Anforderung mit den Parametern überschreibt, die Sie als Optionen übergeben. Unter diesem Link finden Sie eine exemplarische Vorgehensweise zurBackbone.sync
internen Funktionsweise: http://backbonejs.org/docs/backbone.html#section-141Sie können Ihrem Modell oder Ihrer Sammlung Folgendes hinzufügen:
Und dann verarbeiten Sie die Daten als reguläre Post-Daten auf der Serverseite (mit Ihrem Modell / Ihren Modellen in
$_POST['payload']
).Diese Methode macht:
emulateJSON
Aktivieren Sie 'classic POST' mit dem Parameter: Dies sorgt für eine schlankere Syntax sowohl im Frontend als auch im Backend. Andernfalls müssten Sie JSON.stringify für den Parameter 'data' verwenden.$_POST['payload']
Enthält dann ein Array aller Ihrer Backbone-Daten.quelle