2

我有以下 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”。为什么它不明白我在发布什么?

4

3 回答 3

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。

于 2013-08-16T19:26:32.707 回答
0

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

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

除此之外,您不需要:

  • json_decode在你$_POST["email"]的 php 中使用
  • 在您的请求中设置contentType选项或JSON.stringify您的数据对象$.ajax
于 2013-08-16T18:47:25.710 回答
0

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

 $.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"];
于 2013-08-16T18:53:33.383 回答