J'essaie de créer un plugin TODO simple à l'aide de Backbone et j'ai rencontré un problème avec l'API AJAX. Afin d'obtenir le rappel AJAX correct, vous devez passer le paramètre "action" comme ceci:
admin-ajax.php? action = get_todos
qui fonctionne bien pour la méthode GET dans Backbone. Cependant, lorsque vous utilisez DELETE Backbone, une URL comme celle-ci sera utilisée par défaut:
admin-ajax.php? action = get_todos / 9
où "9" est l'ID de la tâche à supprimer. En ajoutant cet ID, il rompt l'appel AJAX du côté WordPress. Je peux remplacer manuellement les URL de chacune des méthodes, mais j'aimerais savoir s'il existe un moyen plus élégant de faire fonctionner l'API AJAX avec Backbone.
J'ai créé un plugin de démonstration qui montre le problème spécifique auquel j'ai été confronté. Chargez la page des paramètres et cliquez sur l'un des X tout en regardant votre inspecteur de réseau pour voir les résultats AJAX à 0 valeur provenant de WordPress.
https://github.com/hereswhatidid/wordpress-todo-backbone-demo
Réponses:
Vous devez remplacer la
Backbone.sync
fonction pour modifier l'URL utilisée pour l'appel AJAX. Vous pouvez apprendre du plugin wp-backbone fait cela et plus encore. Ci-dessous, vous pouvez voir comment il transforme toutes les actions enPOST
ouGET
, créez les paramètres, ajoutez leaction
paramètre et plus encore.la source
Vous n'avez pas besoin de remplacer
Backbone.sync
car Backbone.sync remplacera sa propre demande $ .ajax avec les paramètres que vous passez en tant qu'options. Consultez ce lien pour découvrir commentBackbone.sync
fonctionne en interne: http://backbonejs.org/docs/backbone.html#section-141Vous pouvez ajouter quelque chose comme ce qui suit dans votre modèle ou votre collection:
Ensuite, traitez les données en tant que données de publication régulières côté serveur (avec votre ou vos modèles
$_POST['payload']
).Cette méthode:
emulateJSON
param: cela permet une syntaxe plus légère à la fois sur le frontend et le backend. Sinon, vous devrez utiliser JSON.stringify sur le paramètre 'data'.$_POST['payload']
contient alors un tableau de toutes vos données Backbone.la source