Сообщения об успехе/ошибках amp-mustache не отображаются

Итак, на прошлой неделе я опубликовал Эта проблема по поводу дублирования заголовков. Я исправил эту проблему, я верю, но теперь она возвращает новую ошибку, которую я не могу решить. Я исправил свою последнюю проблему, удалив заголовки, добавляемые во второй раз внутри PHP функции отправки формы, и позволив им существовать только в htaccess.

Единственный заголовок, который существует в форме submit PHP, — это установка Content-Type на application/json.

Когда я отправляю форму, появляется сообщение об отправке. Затем, когда форма отправляется/отказывается, она не возвращает сообщение, содержащееся в тегах шаблона amp-mustache.

    <div submitting>
      <template type = "amp-mustache">
        Form submitting... Thank you for waiting.
      </template>
    </div>

    <div submit-success>
      <template type = "amp-mustache">
        Thanks, your message has been sent successfully.
      </template>
    </div>

    <div submit-error>
      <template type = "amp-mustache">
        Unfortunately your message could not be sent. Please try again later.
      </template>
    </div>

После небольшого осмотра кажется, что мой Content-Type не установлен на application/json на моем PHP, который отправляет форму, но когда я проверяю вкладку «Сеть» в Chrome, все отображается хорошо, что касается заголовков.

Заголовки ответа для PHP (xhr-contact-test.php), который отправляет форму:

access-control-allow-credentials: true
access-control-allow-headers: Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token
access-control-allow-methods: POST, GET, OPTIONS
access-control-allow-source-origin: https://www.craigattachments.com
access-control-expose-headers: AMP-Access-Control-Allow-Source-Origin
amp-access-control-allow-source-origin: https://www.craigattachments.com
cache-control: max-age=604800
cf-railgun: 4d68972973 0.01 0.656948 0030 cc99
cf-ray: 4de04cf54e22ccfe-EWR
content-encoding: br
content-security-policy: default-src * data: blob:; img-src * 'self' data: https: https://static.craigmanufacturing.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' blob: https://cdn.ampproject.org/v0.js https://cdn.ampproject.org/v0/ https://cdn.ampproject.org/viewer/ https://cdn.ampproject.org/v/ https://cdn.ampproject.org/rtv/ https://static.craigmanufacturing.com *.google.com https://maps.googleapis.com/maps/api/js/ https://maps.googleapis.com/maps/api/place/js/ https://cdn.polyfill.io https://cdnjs.cloudflare.com/ajax/; object-src 'self' https://www.craigattachments.com/pdf/; media-src 'self' https://www.craigattachments.com/pdf/; plugin-types application/pdf; style-src 'self' 'unsafe-inline' https://static.craigmanufacturing.com https://cdn.ampproject.org/rtv/ https://fonts.googleapis.com/; base-uri 'self';
content-type: application/json
date: Tue, 28 May 2019 12:41:04 GMT
expect-ct: max-age=604800, report-uri = "https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
expires: Tue, 04 Jun 2019 12:41:03 GMT
feature-policy: microphone 'none'; payment 'none'; geolocation *; sync-xhr 'self' https://www.craigattachments.com
referrer-policy: same-origin
server: cloudflare
status: 200
strict-transport-security: max-age=31536000
vary: User-Agent
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block

Ошибка, которую он возвращает, приведена ниже и указывает на строку 1073 в amp-form.js, которая является функцией, которая устанавливает атрибут i-amphtml-rendered в соответствующем теге шаблона amp-mustache. Изучение этого привело меня к мысли, что тип контента был причиной проблемы, но теперь он, кажется, установлен правильно, и ошибка сохраняется.

Uncaught (in promise) TypeError: b.setAttribute is not a function

Я открыл контактную форму тестирования по этой ссылке: https://www.craigattachments.com/contact-us-test/.

Есть мысли, куда мне идти дальше? Я пробовал несколько вещей, таких как проверка существования определенных заголовков, установка Content-Type внутри моего htaccess и установка моих заголовков только в PHP.


Решение для всех, кто застрял на этом... Если вы отобразите свою электронную почту в виде массива, такого как echo json_encode(array($email));, возникнет эта ошибка. В любом случае удаление массива из уравнения, кажется, исправило это для меня - echo json_encode($email);


Обновление 2019/06/12: Огромное спасибо Аарону. Для этой проблемы были добавлены некоторые лучшие параметры обработки ошибок, если кто-то столкнется с этим в будущем: https://github.com/ampproject/amphtml/pull/22576

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
713
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я быстро взглянул, и похоже, что возвращаемый объект из метода renderTemplate представляет собой массив, а не элемент.

https://github.com/ampproject/amphtml/blob/master/extensions/amp-form/0.1/amp-form.js#L1121

Возможно в коде ошибка. Осматривая div, похоже, что все они также являются одним и тем же сообщением об успехе. Возможно ли воспроизвести это гораздо более простую демо-версию, с минимальными затратами для воспроизведения. например просто форма Спасибо

Вот урезанная версия: craigattachments.com/test-form.php. Извините, что так долго, отсутствовал на обеде.

Craig Scott 28.05.2019 18:19

спасибо, Крейг, я могу воспроизвести ваш набор данных публикации JSON, и это похоже на ошибку, я зарегистрирую проблему и постараюсь ее исправить. Сегодня мы обновим более подробную информацию. Спасибо

Aaron L. 29.05.2019 14:08

Зарегистрирован вопрос github.com/ampproject/amphtml/issues/22570. Похоже, вы непреднамеренно наткнулись на путь кода, который никогда не должен работать с amp-form. Есть ли причина, по которой вы возвращаете массив JSON с конечной точкой публикации? craigattachments.com/xhr-contact-test.php Изменение этого решит проблему... хотя, очевидно, мы исправим ее с нашей стороны. Спасибо за демонстрацию.

Aaron L. 29.05.2019 21:04

Честно говоря, не совсем понимаю, почему мы возвращаем его через массив JSON. Я не участвовал в базовой настройке формы, просто помог отправить ее, и сейчас я работаю над проверкой веб-сайта, чтобы исправить некоторые вещи. На этой неделе я играю около 3 дополнительных ролей на работе, но на следующей неделе я покопаюсь и посмотрю, смогу ли я найти лучший ответ. Спасибо за регистрацию проблемы, я подписался на нее, чтобы быть в курсе ее хода.

Craig Scott 29.05.2019 21:16

Итак, я совершенно не понимаю, почему он передавался обратно как массив JSON. Я удалил массив, и теперь все хорошо. echo json_encode(array($email_subject, $email_address, $html_email, $email_name)) стал echo json_encode($html_email), и мои сообщения об ошибках работают нормально.

Craig Scott 04.06.2019 21:28

Звучит неплохо. Да, я не уверен, где мы стоим, должны ли мы разрешать это, но я собираюсь пойти дальше и внести изменения в код, чтобы утверждать, что шаблон submit-[state] является фактическим элементом, который может быть отображен так, чтобы, по крайней мере, есть сообщение об ошибке, которое полезно, если это не так. Спасибо, Крейг.

Aaron L. 05.06.2019 22:17

Да, полезное сообщение об ошибке было бы здорово. Я оставлю тестовую форму до тех пор, пока не увижу, что опубликованная вами проблема закрыта. Спасибо за помощь, Аарон!

Craig Scott 07.06.2019 13:42

Другие вопросы по теме