Saya mencoba membuat plugin TODO sederhana menggunakan Backbone dan mengalami masalah dengan API AJAX. Untuk mendapatkan kembali panggilan AJAX yang benar, Anda harus memasukkan parameter "action" seperti ini:
admin-ajax.php? action = get_todos
yang berfungsi dengan baik untuk metode GET di Backbone. Namun, ketika menggunakan DELETE Backbone akan menggunakan URL seperti ini secara default:
admin-ajax.php? action = get_todos / 9
di mana "9" adalah ID dari todo yang dihapus. Dengan menambahkan ID ini, itu mematahkan panggilan AJAX di sisi WordPress. Saya dapat secara manual mengganti URL untuk masing-masing metode, tetapi saya ingin tahu apakah ada cara yang lebih elegan untuk membuat API AJAX bekerja dengan Backbone.
Saya telah membuat plugin demo yang menunjukkan masalah spesifik yang saya alami. Muat halaman pengaturan dan klik salah satu X sambil menonton inspektur Jaringan Anda untuk melihat nilai 0 hasil AJAX yang berasal dari WordPress.
https://github.com/hereswhatidid/wordpress-todo-backbone-demo
Jawaban:
Anda perlu mengganti
Backbone.sync
fungsi untuk mengubah URL yang digunakan untuk panggilan AJAX. Anda dapat belajar dari plugin wp-backbone melakukan ini dan banyak lagi. Di bawah ini Anda dapat melihat bagaimana mengubah semua tindakan menjadi salah satuPOST
atauGET
, buat parameter, tambahkanaction
parameter dan banyak lagi.sumber
Anda tidak perlu mengganti
Backbone.sync
karena Backbone.sync akan mengganti permintaan $ .ajax sendiri dengan parameter yang Anda berikan sebagai opsi. Lihat tautan ini untuk mengetahui caraBackbone.sync
kerjanya secara internal: http://backbonejs.org/docs/backbone.html#section-141Anda dapat menambahkan sesuatu seperti yang berikut ini dalam model atau koleksi Anda:
Dan kemudian memproses data sebagai data posting biasa di sisi server (dengan model Anda / model di
$_POST['payload']
).Metode ini:
emulateJSON
param: itu membuat sintaks lebih ramping di kedua frontend dan backend. Anda harus menggunakan JSON.stringify pada parameter 'data' sebaliknya.$_POST['payload']
kemudian berisi larik semua data Backbone Anda.sumber