Использование магистрали с помощью API WordPress AJAX

Я пытаюсь создать простой плагин TODO с использованием Backbone и столкнулся с проблемой с API AJAX. Чтобы получить правильный ответ AJAX, вы должны передать параметр «действие» следующим образом:

админ-ajax.php? Действий = get_todos

, который отлично работает для метода GET в Backbone. Однако при использовании DELETE Backbone будет использовать по умолчанию такой URL:

админ-ajax.php? Действие = get_todos /9

где «9» - это идентификатор удаляемого todo. Добавив этот идентификатор, он разбивает вызов AJAX на стороне WordPress. Я могу вручную переопределить URL-адреса для каждого из методов, но я хотел бы знать, есть ли более элегантный способ заставить API AJAX работать с Backbone.

Я создал демонстрационный плагин, в котором показана конкретная проблема, с которой я столкнулся. Загрузите страницу настроек и нажмите на любой из X, наблюдая за сетевым инспектором, чтобы увидеть результаты AJAX, полученные из WordPress.

https://github.com/hereswhatidid/wordpress-todo-backbone-demo

8 голосов | спросил hereswhatidid 23 +04002013-10-23T08:12:55+04:00312013bEurope/MoscowWed, 23 Oct 2013 08:12:55 +0400 2013, 08:12:55

1 ответ


2

Вам не нужно переопределять Backbone.sync, поскольку Backbone.sync переопределит свой собственный запрос $ .ajax с параметрами, которые вы передаете как опции. См. Эту ссылку для прочтения того, как Backbone.sync работает внутри: http://backbonejs.org/docs/backbone.html#section-141

В вашей модели или коллекции вы можете добавить что-то вроде следующего:

save: function(){
    var $params = {
        emulateJSON: true, 
        data: { 
                 action: 'your_wp_ajax_action', 
                 payload : this.toJSON() 
              } 
        };

    //return $.post(this.url, $params, null);

    return Backbone.sync( 'create', this, $params );
}

Затем обработайте данные как обычные пост-данные на стороне сервера (с вашей моделью /моделями в $_POST['payload']).

Этот метод делает:

  • создать массив необходимых переопределений для вызова ajax.
  • включите «классический POST» с параметром emulateJSON: он упрощает синтаксис как для внешнего интерфейса, так и для бэкэнд. В противном случае вам придется использовать JSON.stringify в параметре «data».
  • возвращает результат вызова Backbone.sync с конфигурацией по умолчанию «create» (POST), набором данных {model} или {models}, если коллекция и наши собственные переопределения.

$_POST['payload'], затем содержит массив всех ваших данных базовой линии.

ответил Mauro Colella 6 J000000Sunday14 2014, 00:48:48

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132