PHP 不捕获由 ajax jquery 在同一页面上发送的 $_POST 数据

Posted

技术标签:

【中文标题】PHP 不捕获由 ajax jquery 在同一页面上发送的 $_POST 数据【英文标题】:PHP not capture $_POST data send by ajax jquery on same page 【发布时间】:2015-03-22 10:41:50 【问题描述】:

我正在使用 ajax 在同一页面上发布数据,并尝试使用以下脚本用 php 回显发布的数据。

$('button').click(function()

         $.ajax(               
            type: "post",
            data: $("form").serialize(),
            beforeSend: function(),
            success: function(data)alert(data),
            error: function(err) alert(err.responseText); 
        )

)

而php脚本是:

<?php echo isset($_POST['data']) ?  $_POST['data'] :''; ?>

我的 html 是:

<form>
      <input type="hidden" name="data" value="to_success"/>
      <button type="button">Click Me</button>
</form>

我的问题是 php 不会在页面上回显已发布的数据,但是当我将表单数据发布到另一个相同 php 脚本的 php 文件上时; php 能够回显发布的数据,而 ajax 对此很警惕。请帮我解决这个问题。谢谢

【问题讨论】:

url 参数应默认为当前 URI,但请尝试明确设置。 当然,还要注意浏览器的网络控制台,以验证请求正在发送并发送到正确的路径。 感谢@Michael Berkowski。我的 url 参数是正确的。对于同一页面,我没有使用 url 参数。对于另一个 php 文件,我使用了正确的 url 请说明您使用的是 GET 还是 POST。您的标题与您的代码不匹配, 这是包含所有这些代码的单个 PHP 文件吗?如果是这样,您的页面将不会回显 POST 变量,因为当您加载页面时它没有被发布到,如果它完全有效,它将返回整个页面及其 HTML 到 ajax 成功警报,如果它可能不起作用无法解释返回值。 【参考方案1】:

如果不将整个 PHP 页面视为一个列表,很难判断,但从您的描述看来,您的问题可能是因为您声明 .click() 事件的方式或您发布到页面的方式。前者的可能性更大。

$.ajax() 请求将使用 XMLHttpRequest 对象 POST 到您的 PHP 脚本。然后,PHP 脚本应该获取这些值,并从脚本中的纯文本和插入的回显值的组合中生成返回字符串。然后,success 方法的回调函数应该会接收到它,并在警报框中以 HTML 文本块的形式向您的页面发出警报。

确实,如果我使用以下代码,就会发生这种情况:

<!DOCTYPE html>
<html>
<head>
    <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
    <script>
    $(document).ready(function() 
        $('button').click(function() 
             $.ajax(               
                type: "post",
                data: $("form").serialize(),
                beforeSend: function() ,
                success: function(data) 
                    alert(data);
                ,
                error: function(err) 
                    alert(err.responseText);
                 
            );
        );
    );
    </script>
</head>
<body>

    <?php echo isset($_POST['data']) ?  $_POST['data'] :''; ?>

    <form>
       <input type="hidden" name="data" value="to_success"/>
       <button type="button">Click Me</button>
    </form>

</body>
</html>

但是,如果我注释掉 $(document).ready(function() 的行及其对应的结尾 );,那么当我单击时不会发生任何事情。

因此,请尝试将您的 .click() 事件定义包装在 $(document).ready() 中。

【讨论】:

以上是关于PHP 不捕获由 ajax jquery 在同一页面上发送的 $_POST 数据的主要内容,如果未能解决你的问题,请参考以下文章

PHP中使用jQuery+Ajax实现分页查询多功能操作

(进阶篇)jQuery+Ajax+PHP+Mysql实现分页显示数据

使用 Jquery、PHP、Mysql 进行 Ajax 分页 [关闭]

jQuery AJAX Post 不工作

创建对 PHP 函数的 jQuery AJAX 请求

如何捕获 jQuery AJAX 错误?