【问题标题】:$.post not POSTing anything$.post 不发布任何内容
【发布时间】:2009-12-21 03:36:23
【问题描述】:

我正在使用以下 jquery 将 cmets 发布到 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 用于不同的功能(这可能是罪魁祸首吗?)

【问题讨论】:

标签: php javascript jquery ajax


【解决方案1】:

假设:

<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 的所有元素(应该只能是零或一个元素)。

【讨论】:

  • 现在我可以看到 POST。但 user_submit.php 没有收到任何东西。我正在使用这里写的内容。还是什么都没有。
  • 我在“user_submit.php”中有错字,是这样吗?您的网址是否正确?
  • 不,我更正了。并且网址是正确的。正如我所提到的,我正在成功地服务另一个 GET 请求。
【解决方案2】:

请记住,您是通过 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 脚本。在回调函数中,“数据”是 PHP 脚本返回的数据。因此,如果您回显该字段值,Firebug 控制台将显示该值。

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

【讨论】:

    猜你喜欢
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多