为什么当我用AJAX中的POST发送数据给PHP时,它说变量是空的?

时间:2013-08-16 18:44:54

标签: javascript jquery ajax post

我有以下jQuery:

$(document).ready(function() {
    $('input[type="submit"]').click(function() {
        event.preventDefault();

        var email = $('.email').val();

        $.ajax({
            type: "POST",
            url: "register_email.php",
            data: JSON.stringify({ "email": email }),
            dataType: "json",
            contentType: "application/json",
            success: function(data) {
                alert(data);
            },
            error: function(jqXHR, textStatus, errorThrown) {
                alert(textStatus + " " + errorThrown);
            }
        });
    });
});

email变量已明确设置,我可以alert出来。

然而,当我到PHP时,这是我的脚本:

<?php
    $db = new mysqli("localhost", "...", "...", "...");

    if ($db->connect_error) {
        echo "Could not connect to database.";
        exit;
    }
    else {
        $emerd = json_decode($_POST["email"]);

        $db->query("INSERT INTO emails (email) VALUES (' " . $emerd . "')");

        echo $emerd;
    }
?>

它始终警告“null”回到我身边。为什么它不明白我在发布什么?

3 个答案:

答案 0 :(得分:1)

将您的电子邮件字段放在这样的表单中

<form id="myform"><input type="text" name="email"></form>

然后使用jQuery序列化它

$('#myform").on('submit', function (e) {
    e.preventDefault();//this keeps the form submission from refreshing the page
   var data = $(this).serialize();
    $.ajax({
      url: '',
      data: data,  //assign the data like this
      type: "post",
      success: function (response){

      },
      ....other params 
   })
})

这是最好的方式来做这个恕我直言,我认为这是这种事情的推荐方式。无需编码为JSON,然后在服务器端解码JSON。

答案 1 :(得分:0)

您没有将json字符串传递回JavaScript。你应该这样做:

echo json_encode(array(
   "email" => $emerd
));

除此之外,您不需要:

  • 在php {/ li>中的json_decode上使用$_POST["email"]
  • contentType请求中设置JSON.stringify选项或$.ajax数据对象

答案 2 :(得分:0)

不要将其编码为数组,也不需要“email”周围的引号。

 $.ajax({
        type: "POST",
        url: "register_email.php",
        data: { email: email, contact:$('#contact').val() }, //no problem even if you have more than one variables.
        success: function(data) {
            alert(data);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            alert(textStatus + " " + errorThrown);
        }
    });

在服务器端,

$emerd = $_POST["email"];