AJAX表单提交给PHP不返回正确的数据

时间:2017-07-05 10:09:38

标签: php jquery ajax

我有一个表单,我想使用php将数据发送到AJAX脚本。但是我遇到了实际传递数据的问题。由于某种原因,$_POST数组为空。

目前HTML是:

<form>
    <label>Email Address:</label>
    <input type='text' name='email' value='jackc@test.com'/>
    <input type='submit' name='submit' value='Check subscription status'/>
</form>

JQuery是:

 $(document).ready(function() {
        $('form').submit(function(e){
            e.preventDefault();
            var url = 'request.php';
            $.ajax({
                type: 'POST',
                url: url,
                contentType: "json",
                data: $('form').serialize(),
                success: function(data){
                    console.log(data);
                    $('#results').html(data);
                }
            });

        });
    });

PHP是:

        $emailAddress = $_POST['email'];
        echo "EMAIL: " . $emailAddress;

然而,它没有返回任何东西。每次都是空白的。当我为$('form').serialize()执行控制台日志时,我看到email=jackc%40@test.com我希望从我的PHP返回。{/ p>

我很感激对此有所帮助。非常感谢。

5 个答案:

答案 0 :(得分:1)

关于这个:

  

当我为$(&#39;表格&#39;)执行控制台日志时,我看到了serialize()   email=jackc%40@test.com

您已指定contentType: "json",但发送了类似application/x-www-form-urlencoded的内容。

您可以在此处看到一个示例:JQuery Post sends form data and not JSON

答案 1 :(得分:1)

测试一下:

$('form').submit(function(e){
            e.preventDefault();
            var url = 'request.php';
            var $form = $(this);
            var request ={
                email : $form.find("[name=email]").val(),
            };
            $.ajax({
                type: 'POST',
                url: url,
                data: request,
                success: function(data){
                    console.log(data);
                    $('#results').html(data);
                }
            });
        });

答案 2 :(得分:1)

您不发送json数据,因此您需要从ajax请求中删除“contentType”。

答案 3 :(得分:0)

添加dataType: "json",代替contentType: "json",将数据作为表单数据发送,并以json格式接收数据:

$(document).ready(function() {
    $('form').submit(function(e){
        e.preventDefault();
        var url = '';
        $.ajax({
            type: 'POST',
            url: url,
            dataType: "json",
            data: $('form').serialize(),
            success: function(data){
                console.log(data);
                $('#results').html(data);
            }
        });

    });
});

如果您不想接收json数据,请完全删除contentType

$(document).ready(function() {
    $('form').submit(function(e){
        e.preventDefault();
        var url = '';
        $.ajax({
            type: 'POST',
            url: url,
            data: $('form').serialize(),
            success: function(data){
                console.log(data);
                $('#results').html(data);
            }
        });

    });
});

答案 4 :(得分:0)

将dataType添加为json而不是contentType,并从服务器返回json编码数据。

<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>
<form id="test">
    <label>Email Address:</label>
    <input type='text' name='email' value='jackc@test.com'/>
    <input type='submit' name='submit' value='Check subscription status'/>
</form>

<div id="results"></div>

<script type="text/javascript">
    $(document).ready(function() {
        $('#test').submit(function(e){
            e.preventDefault();
            var formdata = $('#test').serialize();
            var url = 'request.php';

            alert(formdata);
            $.ajax({
                type: 'POST',
                url: url,
                data: formdata,
                dataType: "json",
                encode :true,
                success: function(data){
                    console.log(data);
                    $('#results').html(data);
                }
            });

        });
    });
</script>

<强> request.php

<?php
$emailAddress = $_POST['email'];
echo json_encode("EMAIL: " . $emailAddress);

?>