Я пытаюсь создать простой плагин TODO, используя Backbone, и столкнулся с проблемой с AJAX API. Для получения правильного обратного вызова AJAX вы должны передать параметр "action" следующим образом:
админ-ajax.php? действие = get_todos
который отлично работает для метода GET в Backbone. Однако при использовании DELETE Backbone по умолчанию будет использоваться такой URL-адрес:
админ-ajax.php? действие = get_todos / 9
где «9» - идентификатор удаляемой задачи. Добавляя этот идентификатор, он прерывает вызов AJAX на стороне WordPress. Я могу вручную переопределить URL-адреса для каждого из методов, но я хотел бы знать, есть ли более элегантный способ заставить AJAX API работать с Backbone.
Я создал демонстрационный плагин, который показывает конкретную проблему, с которой я столкнулся. Загрузите страницу настроек и нажмите любую из X, наблюдая за вашим Инспектором сети, чтобы увидеть результаты AJAX со значением 0, полученные из WordPress.
https://github.com/hereswhatidid/wordpress-todo-backbone-demo
Ответы:
Вам необходимо переопределить
Backbone.sync
функцию, чтобы изменить URL-адрес, используемый для вызова AJAX. Вы можете узнать из плагина wp-backbone это и многое другое. Ниже вы можете увидеть, как он изменяет все действия наPOST
илиGET
, создает параметры, добавляетaction
параметр и многое другое.источник
Вам не нужно переопределять,
Backbone.sync
так как Backbone.sync переопределит свой собственный запрос $ .ajax с параметрами, которые вы передадите в качестве параметров. Посмотрите эту ссылку для ознакомления сBackbone.sync
внутренними принципами работы: http://backbonejs.org/docs/backbone.html#section-141Вы можете добавить что-то вроде следующего в вашу модель или коллекцию:
А затем обработайте данные как обычные данные на стороне сервера (с вашей моделью / моделями
$_POST['payload']
).Этот метод делает:
emulateJSON
параметра: это упрощает синтаксис как во внешнем, так и во внутреннем интерфейсе. В противном случае вам придется использовать JSON.stringify в параметре data.$_POST['payload']
затем содержит массив всех ваших данных Backbone.источник