当前位置: 首页 > 知识库问答 >
问题:

响应必须包含AMP Access Control Allow Source Origin标头(我有它)

朱丰
2023-03-14

编辑:

我更改了表单以提交一个名为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;
}
?>

现在我的错误是解析响应JSON:SyntaxError:JSON失败。解析:JSON数据第1行第1列的数据意外结束

我不明白我做错了什么。下面是我测试amp表单的代码。我包括AMP访问控制允许原点标题。

这是表单提交失败时的控制台:

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替换为通用URL。此表单处理脚本与doctype HTML之前的HTML amp表单位于同一页面上。

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个答案

韦志新
2023-03-14

我用这里找到的答案修复了它。我正在使用PHPMailer发送电子邮件

die('MF000');

发送电子邮件并为AMP表单设置所有标题后,但这会触发以下错误:

无法分析响应JSON:SyntaxError:JSON。解析:JSON数据的第X行第X列出现意外的数据结尾

为了修复这个错误,我简单地移除了旧模具,并简单地使用

die();

如果您仍然想要解析MF000返回代码,请使用:

echo(json_encode(['phpmailer_status'=>'MF000']));
 类似资料: