AMP form submitting with post

后端 未结 2 1036
别跟我提以往
别跟我提以往 2021-01-02 23:38

I\'ve a website for years with a few forms to login etc. Recently I made it all Google\'s AMP proof, but the forms stopped working. I\'m searching for days now, but I can\'t

相关标签:
2条回答
  • 2021-01-03 00:27

    FYI, if you want a quick solution to this then just remove the amp-form script. Forms will work normally. Only fall back is the page won't be amp-validated which isn't a big deal. You still get speed increases. Only thing that won't happen is that the form pages won't be added to google cdn for distribution across their content networks which really only effects mobile users. Then if you really want, go in and learn the the methods presented in this page.

    0 讨论(0)
  • 2021-01-03 00:42

    To put it simply: you can't just echo the input.

    From the docs:

    Use the action-xhr attribute to submit the form via XMLHttpRequest (XHR). You can use amp-mustache templates to show custom success or error messages, using data sent by the server endpoint as JSON. For example, if the server sends {"foo": "bar"}, you can use use {{foo}} in the template to render bar.

    So since you are using the action-xhr, you should be returning a JSON, and update the form template accordingly.

    Check out this.

    Full example, from your code:

    <?php
    if(isset($_POST['submitlogin']))
    {
        $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.domain.com");
    header("Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin");
    
    echo json_encode($output);
    die();
    
    }
    ?>
    <!doctype html>
    <html amp>
    <head>
        <meta charset="utf-8">
        <script async src="https://cdn.ampproject.org/v0.js"></script>
        <script async custom-element="amp-form" src="https://cdn.ampproject.org/v0/amp-form-0.1.js"></script>
        <meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
        <style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link rel="canonical" href="https://www.domain.com/test.php"/>
        <title>AMP form</title>
    </head>
    <body>
    
    <form method="post" action-xhr="#" target="_top">
        Name:<input type="text" name="name" />
        <input type="submit" name="submitlogin" value="Submit" />
    </form>
    <div submit-success>
        <template type="amp-mustache">
            Success! Thanks for trying the
            <code>amp-form</code> demo! The name submited was {{name}}
        </template>
    </div>
    </body>
    </html>
    
    0 讨论(0)
提交回复
热议问题