$ .post没有发布任何内容

时间:2009-12-21 03:36:23

标签: php javascript jquery ajax

我正在使用以下jquery将评论发布到user_submit.php

var submit = document.getElementById("submit_js");
    var comment = document.getElementById("comment");

    $("#submit").bind('click', function(){
        $.post("user_submit.php", {
            comment: $("#comment").text()
        });
    });

user_submit.php听取:

$comment = htmlspecialchars($_POST["comment"]);

我可以在Firebug控制台中看到没有发生POST。只有一个GET用于不同的功能(这可能是罪魁祸首吗?)

2 个答案:

答案 0 :(得分:4)

假设:

<input type="text" id="comment">
<input type="button" id="submit_js">

你想要:

$(function() {
  $("#submit_js").click(function() {
    $.post("user_submit.php", {
      comment: $("#comment").val()
    });
  });
});

PHP:

<?php
$comment = $_POST['comment'];
//...
echo htmlspecialchars($comment); // nothing catches this currently
?>

您的代码中似乎也会混淆“submit”和“submit_js”。我建议不要不必要地混合Javascript和jQuery代码(“getElementById()”业务)。您应该熟悉jQuery selectors。例如:

$("#submit_js")

将创建一个jQuery对象,其中包含ID为submit_js的所有元素(仅为零或一个元素)。

答案 1 :(得分:0)

请记住,您是通过AJAX发布的,所以即使您回显字段值,它也不会显示在您的屏幕上,除非您在$ .post回调中监听它。

要检查问题可能是什么,请在没有jQuery的情况下正常提交表单。如果您的PHP脚本回显字段值,那么PHP脚本正在运行 - 检查您的JavaScript。如果您在使用print_r()时出现空白或空数组,请确保表单中的字段名称与您在PHP脚本中使用的字段名称相同。

不希望您必须重写代码,但这是我建议您做的。

<form class="comments" method="post" action="user_submit.php">
    <input type="text" name="comment" />
    <input type="submit" value="Submit" />
</form>

JavaScript的:

$('.comments').submit(function() {
    var $form = $(this);

    $.post(
        $form.attr('action'),
        $form.serialize(),
        function(data, status) {
            console.log(data);
        }
    );

    return false;
}

这会将您的表单提交给PHP脚本。在回调函数中,“data”是PHP脚本返回的数据。因此,如果您回显字段值,Firebug控制台将显示该值。

如果用户的浏览器禁用了JavaScript,表单仍会正确提交。当然,您的PHP脚本必须检查表单是否是通过AJAX提交的,以便它可以根据请求方法正确处理。一种简单的测试方法是检查X-Requested-With标头。如果是通过AJAX发送的,则值为XMLHttpRequest。