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

AMP PHP联系人表单不重定向(谷歌AMP)

翟越
2023-03-14

我有AMP中的HTML表单,带有POST操作;电子邮件的PHP文件使用Sendgrid API。我尝试了Json重定向的headers响应,但不起作用。

出于这个原因,我应用了JavaScript重定向(是的,我知道,这会为AMP验证生成错误,但我需要重定向到跟踪在线转换的感谢页面)。

PHP文件工作正常,所有电子邮件都是发送的,但没有JavaScript重定向,只有电子邮件发送的div成功或错误,只有我看到发送电子邮件的错误,但是,矛盾的是,所有电子邮件都是发送的(通过Sendgrid API,LOL没有问题)。

所以,我需要重定向超文本标记语言联系表单与正确的PHP头Json响应(没有JavaScript),跟踪在线转换和正确验证我的AMP超文本标记语言源。在其他情况下,我认为它是非常有用的使一个正确的重定向从PHP文件后成功提交(我尝试重定向与头位置在PHP,但,不工作...)

表格:

<form method="post"
  class="p2"
  action-xhr="//example.com/path/themex/amp-theme/path/file.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="Nombre"
      required>
    <input type="tel"
      class="block border-none p0 m0"
      name="tel"
      placeholder="Teléfono"
      required>
  </div>
  <select name="store"
      id="store">
      <option value="San Antonio">San Antonio</option>
      <option value="Santiago Centro">Santiago Centro</option>
      <option value="San Bernardo">San Bernardo</option>
      <option value="Puente Alto">Puente Alto</option>
      <option value="Rancagua">Rancagua</option>
      <option value="Chillán">Chillán</option>
      <option value="Talca">Talca</option>
      <option value="Concepción">Concepción</option>
      <option value="Los Ángeles">Los Ángeles</option>
      <option value="Linares">Linares</option>
      <option value="Valdivia">Valdivia</option>
      <option value="Temuco">Temuco</option>
      <option value="Puerto Montt">Puerto Montt</option>
    </select>
    <label for="sucursal"
      class="absolute top-0 right-0 bottom-0 left-0">Selecione una Ciudad</label>
  <input type="submit"
    value="Enviar"
    class="ampstart-btn caps" onclick="redirectThanks()">
    				        <script>
function redirectThanks() {
    window.location = "https://www.example.com/thanks-page/amp/";
}
</script>
  <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帖子:

<?php
/*SendGrid Library*/
require_once ('vendor/autoload.php');

/*Post Data*/
$name = $_POST['name'];
$tel = $_POST['tel'];
$store = $_POST['store'];

/*Content*/
  $from = new SendGrid\Email("Sender", "no-reply@example.com");
$subject = "My Subject {$store}";
$to = new SendGrid\Email("Recipient", "address@example.com");
$content = new SendGrid\Content("text/html", "
	Name: {$name}<br>
	Phone: {$tel}<br>
	Store: {$store}
	");

/*Send the mail*/
$mail = new SendGrid\Mail($from, $subject, $to, $content);
$apiKey = ('mysendgridapikeyhash');
$sg = new \SendGrid($apiKey);

/*Response*/
$response = $sg->client->mail()->send()->post($mail);

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");
header ('AMP-Redirect-To: https://www.example.com/thanks-page/amp/');

?>

有什么想法吗?

共有1个答案

郭乐湛
2023-03-14

我注意到您指定了一个Access Control Expose Headers标头,并且只添加了AMP Access Control Allow Source Origin。amp表单文档说明amp重定向到的内容也需要公开。

试试这个:

header("Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin, AMP-Redirect-To");

如果这不起作用,请尝试打开浏览器开发人员工具,并在问题中添加任何控制台错误。如果出现任何问题,AMP框架通常会在控制台中编写非常有用的错误消息,这些消息对于诊断问题非常有用。

 类似资料:
  • 我正在使用oauth 1.0,到目前为止,我可以成功地从谷歌获得访问令牌。但是当我想从https://www.google.com/m8/feeds/contacts/default/full检索用户联系人时,它返回401错误,没有进一步的解释。 我发现来自Google playground的信息可能不太准确,例如,步骤3和步骤5中的签名基本字符串包含oauth_version,但它是错误的。(如

  • 此函数工作正常。当当前工作表不是Google表单响应工作表时。我正在使用(每分钟)触发器 图像:沙子数据(主数据)表至(共享数据1)表 我正在寻找一个,当用户提交的谷歌表格的状态是(支付),数据应该在第二页,这是(shareData1) 这里的问题是,当我使用谷歌表单响应表时,这个函数将不再工作。它显示了一个错误。错误图像 在降级的错误图像中,我手动运行此函数,相同的错误显示在AppScript面

  • 联系人名单     登录至联系人名单 确认登入状态 编辑联系人名单

  • 最后编辑:现在一切正常工作将在下面的工作代码,清理后像idealCastle说,并修复了一些语法错误,一切正常工作,因为它应该与javascript验证谢谢大家 超文本标记语言代码: Javascript文件: PHP文件:

  • 我正在为我的项目构建一个ajax/php联系表单,包含以下字段: 姓名(必填)、电子邮件(必填)、主题(必填)和网站(必填) 一切正常,现在唯一的问题是,如果用户没有在主题和或网站字段中键入任何内容,我收到的电子邮件显示这两个字段如下: 主题:(显示空白) 网址:(显示空白) 如果用户没有在我收到的电子邮件中键入任何内容,是否可能根本不显示这两个字段 名称:[用户名] 邮箱:[用户邮箱地址] 我只

  • 我有一个正在写的剧本,需要一些帮助。 首先,我的脚本应该如何工作。 脚本:用户填写谷歌表单并点击提交。提交后,我的脚本运行并从google工作表中读取我在工作表中操作的一系列数据单元。然后将数据单元格格式化为字符串,并在表单的确认消息中提示。 现在问题来了。 问题:当我提交我对表格的回复时,从表格到表格的一切都很好。当我手动运行代码时,代码工作正常。当我提交表单响应时,事件历史记录会显示触发器并说