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

AMP表单响应在google缓存中不工作

田志尚
2023-03-14

我为我的网站创建了一个AMP页面,在我的桌面浏览器上运行正常,在我的手机上测试正常,如果某些字段为空或无效,提交错误将正确显示错误消息,并且在成功提交时,它将正确显示提交成功消息。

当我将页面提交给Google缓存amp页面时,我再次测试了表单,这次它没有显示错误或成功消息。但如果表单提交有效,它将向我发送电子邮件,但不会显示成功消息。

表单html代码:

<form action-xhr="posts/submit.php" method="POST" class="contactForm" target="_top">
    <fieldset>
        <div class="formFieldWrap">
            <label class="field-title">Select a product:<span>(required)</span></label>
            <div class="select-style full-bottom">
            <select name="product">
                    <option selected="" disabled="">Select a Product</option>
                    <option value="product1">product 1</option>
                    <option value="product2">product 2</option>
            </select>
            </div>
        </div>                  
        <div class="formFieldWrap">
            <label class="field-title">Full Name:<span>(required)</span></label>
            <input type="text" name="fullname" value="" class="contactField" />
        </div>
        <div class="formFieldWrap">
            <label class="field-title">Telephone: <span>(required)</span></label>
            <input type="text" name="telephone" value="" class="contactField" />
        <div class="formFieldWrap">
            <label class="field-title">Email: <span>(required)</span>
            </label>
            <input type="text" name="email" value="" class="contactField" />
        </div>
        <input type="hidden" name="ps" value="amp_Homepage">
        <div class="formSubmitButtonErrorsWrap contactFormButton">
            <input type="submit" class="buttonWrap button bg-teal-dark contactSubmitButton" value="Start my claim" />
        </div>
    </fieldset>
    <div submit-success>
        <template type="amp-mustache">
            <span class="center-text color-green-dark"><strong>Congratulations {{fullname}}!</strong> You have successfully submitted your claim. You can expect a telephone call from My Claim Solved just to confirm a few details.</span>
        </template>
    </div>
    <div submit-error>
        <template type="amp-mustache">
            <span class="center-text color-red-light"><strong>Oops!</strong> {{message}}</span>
        </template>
    </div>
</form>

PHP页面:

<?php
$source_origin = trim($_REQUEST['__amp_source_origin']);//Security
if($source_origin != "https://example.com"){
echo "Not allowed origin";
return;
}
header('AMP-Access-Control-Allow-Source-Origin: https://example.com');
header('Content-Type: application/json; charset=UTF-8;'); 

$start = microtime(true);
$con=mysqli_connect("myip","myuser","mypass","mydb");


$Product = mysqli_real_escape_string($con, $_REQUEST['product']);
$FullName = mysqli_real_escape_string($con, $_REQUEST['fullname']);$FullName = ltrim($FullName);$FullNameMail = mysqli_real_escape_string($con, $_REQUEST['fullname']);
$Telephone = mysqli_real_escape_string($con, $_REQUEST['telephone']);
$Email = mysqli_real_escape_string($con, $_REQUEST['email']);
$Provider = mysqli_real_escape_string($con, $_REQUEST['provider']);
$PageSource = mysqli_real_escape_string($con, $_REQUEST['ps']);


if($Product != 'product1' && $Product != 'product2'){
    header('Status: 400', TRUE, 400);
    echo json_encode(array('message'=>'You must select a product.'));
}elseif(empty($FullName) || strlen($FullName)<3) {
    header('Status: 400', TRUE, 400);
    echo json_encode(array('message'=>'You must enter your full name.'));
}elseif (empty($Telephone) || strlen($Telephone)<9) {
    header('Status: 400', TRUE, 400);
    echo json_encode(array('message'=>'You must enter a valid telephone number.'));
}elseif (!filter_var($Email, FILTER_VALIDATE_EMAIL)) {
    header('Status: 400', TRUE, 400);
    echo json_encode(array('message'=>'You must enter a valid email address.'));
}else{

    // Send Email
    $To = "myemail@example.com";
    $Message = "bla bla";
    $Headers = "From: myemail@example.com";  
    mail($To, 'subject bla', $Message, $Headers); 


    echo json_encode(array("product"=>$Product,"fullname"=>$FullName,"telephone"=>$Telephone,"email"=>$IPAddress));
}

?>

共有1个答案

施念
2023-03-14

为了让您知道它是如何修复的(感谢ade为我指出了正确的方向),我将php页面上的标题修改为:

header("access-control-allow-credentials:true");
header("access-control-allow-headers:Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token");
header("access-control-allow-methods:POST, GET, OPTIONS");
header("access-control-allow-origin:".$_SERVER['HTTP_ORIGIN']);
header("access-control-expose-headers:AMP-Access-Control-Allow-Source-Origin");
header("amp-access-control-allow-source-origin:https://".$_SERVER['HTTP_HOST']);
header("Content-Type: application/json");
 类似资料:
  • 问题内容: 我正在使用以下代码从服务器提取简单的JSON提要: 有用。但是,在更改JSON文件并验证是否在浏览器中进行了更改之后,当我再次运行该应用程序时,仍会得到先前的响应。 看来AFNetworking正在某种程度上缓存旧的响应。我不要这种行为。我想下载当前的提要。是否需要某种类型的设置或参数来关闭缓存? 问题答案: 简而言之,只需定义您的AFNetworking经理即可: 请享用!

  • 早上好,我在一个测试AMP页面上有一个表单(是AMP验证),表单工作:我收到了带有结果的电子邮件(我使用一个php来处理它)。我不知道(我做了一些尝试,但我想我仍然错过了一个例子)让AMP页面正确响应的语法(现在我得到订阅失败!但我确实收到了电子邮件)或提交后重定向。这里我的例子: AMP带有表单的页面(我在提交后收到表单结果,但我不知道如何重定向或获得“订阅成功!”(信息) 带有表单的非AMP页

  • 我在使用谷歌的API更新我正在工作的网站的amp页面时遇到了问题。该网站是一个基于Wordpress的网站,使用WP Amp生成Amp页面,它将/Amp附加到任何启用的页面。 我读过这里的留档,它似乎应该是一个简单的GET请求,使用这种结构: https://cdn.ampproject.org/update-ping/c/s/www.example.com/example-category/ex

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

  • 问题内容: 我想确保浏览器永远不会缓存服务器的响应,这样即使发出两个相同的请求(相隔一纳秒),也始终会与服务器联系。这是实现此目标的正确方法: 谢谢唐 问题答案: 不,那不是正确的方法。这是正确的方法: 您可能会看到其他人在建议其他条目/属性,但是当至少提及上述内容时,它们是完全不相关的。 更改后,请不要忘记在测试之前清除浏览器缓存。 也可以看看: 网站站长缓存教程

  • 问题内容: 我使用一些GeoIP服务在页面上放置国家/地区标记,具体取决于国家/地区IP。我需要为网站上的所有页面缓存JSON响应。 将此代码放入: 是否可以将其缓存?-似乎不起作用。 或者使用HTML5 localStorage可能更好,但是我不确定该怎么做。 我也尝试了JSONCache插件,但是对我来说不起作用。 问题答案: 您可以这样使用localStorage: 演示 因此,在您的特定情