Ответ должен содержать заголовок AMP-Access-Control-Allow-Source-Origin (он у меня есть)

РЕДАКТИРОВАТЬ:

Я изменил свою форму для отправки в новый файл с именем amp-form-submit.php

Этот файл выглядит так:

<?php

header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin:".$_SERVER['HTTP_ORIGIN']);
header("AMP-Access-Control-Allow-Source-Origin: https://".$_SERVER['HTTP_HOST']);
header("Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin");
header("Access-Control-Expose-Headers: AMP-Redirect-To, AMP-Access-Control-Allow-Source-Origin"); 

if(!empty($_POST["form_submit"])){
$domain_url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]";
header("Content-Type: application/json");
$email = isset($_POST['email']) ? $_POST['email'] : '';
$output = ['email' => $email];
header("Content-Type: application/json");
echo json_encode($output);
exit;
}
?>

Теперь моя ошибка Failed to parse response JSON: SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data


Я не понимаю, что я делаю не так. Ниже приведен мой код для проверки моей формы усилителя. Я включил заголовок AMP-Access-Control-Allow-Origin.

Это консоль при неудачной отправке формы:

POST https://example.com/location/amp-lp/?__amp_source_origin=https%3A%2F%2Fexample.com 404 ()

Response must contain the AMP-Access-Control-Allow-Source-Origin header

Form submission failed: Error: Response must contain the AMP-Access-Control-Allow-Source-Origin header​​​

Я заменил URL на общий для конфиденциальности. Этот сценарий обработки формы находится на той же странице, что и моя HTML-форма, перед html типа документа.

if ( isset($_POST['form_submit']) ) {
  $name = isset($_POST['name']) ? $_POST['name'] : '' ;
  $output = [
  'name' => $name
  ];

  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");

  echo json_encode($output);
  die();

}

моя форма

       <form id="lp-form" target="_blank" action-xhr="https://example.com/location/url/" method="post">
         <div submit-success>
            Thank you! Your message has been sent.
        </div>
        <div submit-error>
          An error occurred. Please try again.
        </div>
        ...
        <!-- inputs -->
        </form>

1 ответ

Я исправил это, используя ответ, найденный здесь. Я использую PHPMailer для отправки писем, и я использовал

die('MF000');

после того, как письмо было отправлено и все заголовки были установлены для AMP Form, но это вызывает следующую ошибку:

Не удалось проанализировать ответ JSON: SyntaxError: JSON.parse: неожиданный конец данных в строке X столбца X данных JSON

Чтобы исправить эту ошибку, я просто удалил старый кубик и просто использовал

die();

Если вы все еще хотите проанализировать код возврата MF000, используйте:

echo(json_encode(['phpmailer_status'=>'MF000']));
Другие вопросы по тегам