Не работает метод поста в форме железа из полимера $_POST переменная пуста

Когда я использую почтовый метод iron-form не работает, но метод get работает. Вот код:

test.php:

<script>
    document.addEventListener("WebComponentsReady",function() {
        document.querySelector("#form").addEventListener('iron-form-submit',function(e){
            });
        document.querySelector("#form").addEventListener('iron-form-response',function(e){
            console.log(e);
        });
        document.querySelector("#form").addEventListener('iron-form-error',function(e,s,d){
            console.log(e);
            alert('iron form error!');
        });
    });
</script>
<body>
    <form is="iron-form" id="form" method="post" action="/user/put">
        <input name="address" required>
        <input type="submit" value="submit" >
    </form>
</body>

index.php:

<?php
    var_dump($_POST);
?>

когда я отправляю скриншот формы вкладки innetwork заголовков:Скриншот заголовков во вкладке сети при отправке формы

вкладка ответа:

array(0) {
}

2 ответа

Решение

Возможно, это связано с тем, что с использованием железных форм данные POST отправляются в формате JSON, посмотрите на вкладку Params инструментов разработчика браузера, чтобы увидеть, что отправлено!

var_dump ($ _ POST) в скрипте php возвращает пустую строку, если она не декодирована.

Попробуйте file_get_contents с php://input для доступа к потоку ввода-вывода и json_decode на стороне сервера, например:

PHP-скрипт на стороне сервера:

<?php
$datas = file_get_contents("php://input");
$_POST = json_decode($datas, true);

$return = '<ul>';
foreach($_POST as $index=>$val) {
    $return .= '<li>'.$index.'/'.$val.'</li>';
}
$return .= '</ul>';

echo '{"my_return": "'.$return.'"}';

И полимерный компонент:

<dom-module id="my-form">
    <template>
        <div class="horizontal center-center layout">
            <div>
                <div class="horizontal-section">
                    <form is="iron-form" id="formGet" method="post" action="add.php">
                        <paper-input name="name" label="Name" value="John Doe" required></paper-input>
                        <paper-input name="age" label="Age" value="97" required></paper-input>
                        <br><br><br>
                        <paper-button raised onclick="clickHandler(event)">Submit</paper-button>
                    </form>
                </div>
            </div>
        </div>
    </template>
    <script>

        function clickHandler(event) {
            Polymer.dom(event).localTarget.parentElement.submit();
        }

        Polymer({
            is: 'my-form',
            listeners: {
                'iron-form-response': 'formResponse',
                'iron-form-submit': 'formSubmit',
                'iron-form-error': 'formError'
            },
            formError: function(e) {
                alert(e.detail.error);
        },
        formSubmit: function(e) {
            //alert(document.getElementById("formGet").serialize().name);
            //alert(document.getElementById("formGet").serialize().age);
        },
        formResponse: function(e) {
             document.getElementById('contentECLP').innerHTML = e.detail.my_return;
       }
    });
</script>

По журналу вашей сети iron-form работает правильно, проблема должна быть на стороне PHP.

От руки это выглядит, как будто вы отправляете /user/put но твой var_dump находится в index.php, убедитесь, что ваши пути к файлам правильные.

Другие вопросы по тегам