Друпал 8 MailChimp Для Аякса Блок Регистрации

Друпал 8 MailChimp Для Аякса Блок Регистрации

13.05.2016 08:44:58 Просмотров 47 Источник

Я пытаюсь ajaxify блок регистрации Drupal 8 Mailchimp, но я застрял с AjaxResponse.

Это моя форма изменить крюк:

function mailchimp_ajax_form_form_alter(&$form, \Drupal\Core\Form\FormStateInterface &$form_state, $form_id) {

  if ($form_id != 'mailchimp_signup_subscribe_block_form') {
    return;
  }
  $form['submit']['#ajax'] = [
    'callback' => 'mailchimp_ajax_form_callback',
    'prevent'  => 'click',
    'progress' => array(
      'type' => 'throbber',
      'message' => t('Submitting data...')
    )
  ];

}

Это моя функция обратного вызова :

function mailchimp_ajax_form_callback(array &$form, \Drupal\Core\Form\FormStateInterface $form_state) {


  $response = new \Drupal\Core\Ajax\AjaxResponse();

  $response->setContent('Response');
  return $response;
}

Но в Chrome console есть только ошибка:

Uncaught AjaxError: 
An AJAX HTTP error occurred.
HTTP Result Code: 200
Debugging information follows.
Path: /node?ajax_form=1
StatusText: OK
ResponseText: Response

Регистрация работает, но мой вопрос в том, как я могу получить ответ mailchimp и поместить его в действительный AjaxResponse?

У вопроса есть решение - Посмотреть?

Ответы - Друпал 8 MailChimp Для Аякса Блок Регистрации / Drupal 8 Mailchimp Ajax Signup Block

acrosman

17.05.2016 03:47:09

Во-первых, объект AjaxResponse имеет setData(), а не setContent().

Чтобы действительно подписаться на mailchimp через модуль Drupal, вы можете использовать функцию mailchimp_subscribe()в главном модуле mailchimp.

https://stackoverflow.com/questions/37216286/drupal-8-mailchimp-ajax-signup-block/37276676#comment62078846_37276676
Когда я меняю setContent на setData, возникает следующая ошибка: Uncaught SyntaxError: Unexpected token R. Подписка работает, как я уже писал в вопросе, но как я могу получить ответ от сервера Mailchimp в функции обратного вызова, чтобы я мог вернуть его клиенту?
https://stackoverflow.com/questions/37216286/drupal-8-mailchimp-ajax-signup-block/37276676#comment62080895_37276676
В SyntaxError приходит, если вам не дают array в setData метод. Теперь мне нужен только ответ от функции mailchimp_subscribe, которая вызывается методом submitFormформы MailchimpSignupPageForm
https://stackoverflow.com/questions/37216286/drupal-8-mailchimp-ajax-signup-block/37276676#comment62087717_37276676
Да, setData() ожидает массив, который будет закодирован как JSON и передан обратно в ваш JavaScript, который вызвал запрос в первую очередь. И вы должны быть в состоянии вызвать функцию подписки напрямую. Вы можете попробовать обработчик для формы, но я не знаю, что будет делать то, что вы хотите в терминах или ответа.
Является ответом!
bambamboole

22.05.2016 12:44:12

Мое "рабочее" решение сейчас-это:

измените блок формы, добавьте функцию обратного вызова ajax, предотвратите щелчок и добавьте визуализацию прогресса ajax.

/**
 * Implements hook_form_FORM_ID_alter()
 *
 * @param \Drupal\mailchimp_signup\Form\MailchimpSignupPageForm $form
 * @param \Drupal\Core\Form\FormStateInterface                  $form_state
 * @param                                                       $form_id
 */
function mailchimp_ajax_form_form_alter(&$form, \Drupal\Core\Form\FormStateInterface &$form_state, $form_id) {

  if ($form_id != 'mailchimp_signup_subscribe_block_form') {
    return;
  }
  $form['submit']['#ajax'] = [
    'callback' => 'mailchimp_ajax_form_callback',
    'prevent'  => 'click',
    'progress' => array(
      'type' => 'throbber',
      'message' => t('Submitting data...')
    )
  ];

}

Это обратный вызов Ajax:

Я создаю новый AjaxResponse. Затем какой-то хак, чтобы получить правильное сообщение.

и добавьте drupal_get_messages()ReplaceCommand, который заменяет форму сообщением Mailchimp.

ReplaceCommand

Я думаю, что есть гораздо более элегантные способы получить это. Я до сих пор не знаю, почему метод submitForm формы Mailchimp все еще вызывается...

Omar Alahmed

27.10.2019 06:16:16

Опция AJAX привязана к модулю, вы можете найти ее здесь: https://www.drupal.org/project/mailchimp/issues/2721249

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

Закрыть X