Intereting Posts
Swift Mailer – не удается отправить почту и не удается найти журналы ошибок Добавить контроллер 'prefix' для URL-адреса в CodeIgniter PHP по-прежнему не позволяет загружать файлы более 2 МБ Пример PHP.ini для включения сеансов? PDO – FETCH_CLASS – передать результаты в конструктор в качестве параметров Передача данных с PHP на JavaScript Учетная запись Paypal Express Checkout отсутствует. Ошибка 10400 Тонкие выходы JSON Форсирование диалога «Сохранить как» через jQuery GET PHP – Встраивание сгенерированного изображения из внешнего файла в электронную почту HTML Функция Smarty Object с ассоциативным массивом Неожиданный «=>», ожидаемый один из: «», «», «)», как ограничить определенный домен (ы) электронной почты, а также отправить форму Регулярное выражение для удаления не буквенно-цифровых символов из строк UTF8 метод обслуживания как глобальная переменная twig Нужна помощь с моей функцией PHP пейджера теперь, когда я использую mod-rewrite

Проблема ответа формы бюллетеня AMP

Я пытаюсь внедрить форму подписки на бюллетень AMP, используя ссылку Ссылка . После отправки формы на стороне сервера я использую следующий код для обработки запроса и ответа на возврат:

Сценарий на стороне сервера:

<?php header("Content-type: application/json"); header("Access-Control-Allow-Credentials: true"); header("Access-Control-Allow-Origin: *.ampproject.org"); header("AMP-Access-Control-Allow-Source-Origin: https://www.example.com"); header("Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin"); $data = array('name'=>$_POST['name'],'email'=>$_POST['email']); echo json_encode($data);exit; ?> 

ФОРМАТ AMP HTML

 <form method="post" class="p2" action-xhr="https://www.example.com/request.php" target="_top"> <div class="ampstart-input inline-block relative m0 p0 mb3"> <input type="text" class="block border-none p0 m0" name="name" placeholder="Name..." required> <input type="email" class="block border-none p0 m0" name="email" placeholder="Email..." required> </div> <input type="submit" value="Subscribe" class="ampstart-btn caps"> <div submit-success> <template type="amp-mustache"> Success! Thanks {{name}} for trying the <code>amp-form</code> demo! Try to insert the word "error" as a name input in the form to see how <code>amp-form</code> handles errors. </template> </div> <div submit-error> <template type="amp-mustache"> Error! Thanks {{name}} for trying the <code>amp-form</code> demo with an error response. </template> </div> </form> 

Как только запрос будет завершен. Он всегда отображает часть submit-success моего шаблона формы HTML. Мой главный вопрос: Как показать часть submit-error выше формы с возвратом name со стороны сервера и как я обрабатываю запрос на стороне сервера, чтобы он мог отображать success сообщение или сообщение error соответственно?

submit-success submit-error отображаются на основе кода состояния ответа сервера. Для ответов об ошибках код состояния должен находиться в диапазоне 4XX или 5XX.

Спасибо @SebastianBenz за то, что вы дали мне подсказку об ошибке, например, 4XX или 5XX . Однако я прочитал amp-from, но меня смутило 2XX, упомянутое в разделе « Ответ на ошибку» . submit-success будет отображать для всех ответов, которые имеют статус 2XX, т.е. 200, 201, 201 и т. д.

Теперь следующий мой полный рабочий бюллетень:

AMP HTML FORM:

 <form method="post" class="p2" action-xhr="https://www.example.com/request.php" target="_top"> <div class="ampstart-input inline-block relative m0 p0 mb3"> <input type="text" class="block border-none p0 m0" name="name" placeholder="Name..." required> <input type="email" class="block border-none p0 m0" name="email" placeholder="Email..." required> </div> <input type="submit" value="Subscribe" class="ampstart-btn caps"> <div submit-success> <template type="amp-mustache"> Success! Thanks {{name}} for trying the <code>amp-form</code> demo! Try to insert the word "error" as a name input in the form to see how <code>amp-form</code> handles errors. </template> </div> <div submit-error> <template type="amp-mustache"> Error! Thanks {{name}} for trying the <code>amp-form</code> demo with an error response. </template> </div> </form> 

PHP SCRIPT (request.php):

 <?php header("Content-type: application/json"); header("Access-Control-Allow-Credentials: true"); header("Access-Control-Allow-Origin: *.ampproject.org"); header("AMP-Access-Control-Allow-Source-Origin: https://www.example.com"); /* Return error if Posted name is sanchit or do your logic */ if($_POST['name'] == 'sanchit'){ /* Return Error*/ header("HTTP/1.0 412 Precondition Failed", true, 412); $data = array('name'=>$_POST['name'],'email'=>$_POST['email'],'msg'=>'Sorry '.$_POST['name'].'! cannot access this form.'); echo json_encode($data);exit; }else{ /* Return Success */ header("Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin"); $data = array('name'=>$_POST['name'],'email'=>$_POST['email']); echo json_encode($data);exit; } exit; 

ОБНОВИТЬ

Заменить следующую строку

 header("Access-Control-Allow-Origin: *.ampproject.org"); 

С

 header("Access-Control-Allow-Origin: ". str_replace('.', '-','https://www.example.com') .".cdn.ampproject.org");