首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >及通讯表格回应期

及通讯表格回应期
EN

Stack Overflow用户
提问于 2017-09-27 11:20:38
回答 2查看 839关注 0票数 1

我正在尝试使用Reference Link实现AMP通讯订阅表单。提交表单后,在服务器端,我将使用以下代码处理请求并返回响应:

服务器端脚本:

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<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>

一旦请求完成。它总是显示我的HTML模板的submit-success部分。我的主要问题是如何显示上述表单的submit-error部分,并从服务器端返回name,以及如何在服务器端处理请求,以便分别显示successerror消息?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-29 02:32:40

谢谢@SebastianBenz给了我一个错误响应状态的提示,比如4XX5XX。然而,我读过amp-from,但我与2 2XX混淆在错误响应中。submit-success将为状态为2XX的所有响应呈现,即200、201、201等。

下面是我完整的工作通讯代码:

AMP HTML表单:

代码语言:javascript
复制
<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脚本(request.php) :

代码语言:javascript
复制
<?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;

更新

替换下一行

代码语言:javascript
复制
header("Access-Control-Allow-Origin: *.ampproject.org");

使用

代码语言:javascript
复制
header("Access-Control-Allow-Origin: ". str_replace('.', '-','https://www.example.com') .".cdn.ampproject.org");
票数 0
EN

Stack Overflow用户

发布于 2017-09-28 14:13:28

submit-successsubmit-error div是根据服务器响应的状态代码呈现的。对于错误响应,状态代码需要在4XX或5XX范围内。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46446610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档