$.post 不向 php 脚本发送数据

Posted

技术标签:

【中文标题】$.post 不向 php 脚本发送数据【英文标题】:$.post not sending data to php script 【发布时间】:2015-10-28 16:44:53 【问题描述】:

好吧,我不知道出了什么问题。我试图从一个简单的 jQuery 脚本将表单数据传递给我的 php 脚本,但是由于某种原因,当我尝试访问 $_POST 数据时,php 说 $_POST 是空的?

我们开始吧,所以我有以下 jQuery 和 php 脚本

jQuery

var post = $('#cform').serialize();
console.log("POST DATA: " + post);
$.post(action, post, function(data)
    document.getElementById('message').innerhtml = data;
    $('#message').slideDown('slow');
    $('#cform img.contact-loader').fadeOut('slow',function()$(this).remove());
    $('#submit').removeAttr('disabled');
    if(data.match('success') != null) $('#cform').slideUp('slow');
 );

PHP

$fname  = $_POST['fname'];
$lname  = $_POST['lname'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$comments = $_POST['comments']; 

var post 的控制台日志是这样的

POST DATA: fname=Daniel&lname=Jarvis&email=test%40gmail.com&phone=4444444444&comments=hello

$_POST 的 var_dump 是这样说的

array(0)   

我不知道为什么这会给我带来这么多问题,因此我们将不胜感激。

附言 我也尝试过简单地为发布数据执行此操作,但它仍然无法正常工作。

var post = fname: $('#fname').val(), lname: $('lname').val(), ... //you get the idea

console.log 看起来像这样

fname: "Dan", lname: "Jarvis", ...

但是当我 var_dumped $_POST 变量时它仍然说

array(0)   

【问题讨论】:

查看$.ajax() 语法。在我看来,它比 $.post() 语法直观得多。 检查$_SERVER['REQUEST_METHOD']。如果那不是帖子,那么您的 ajax 帖子被重定向到其他地方。 在浏览器的控制台中观察请求/响应。您将看到请求是否包含有效负载以及响应返回的任何数据。 我查看了 $_SERVER['REQUEST_METHOD'] 并显示 string(3) "GET"?任何想法这意味着什么或为什么它说 GET 而不是 POST? @MarcB 某事会导致您的帖子被重定向,从而将其变成获取。您将不得不四处寻找重写或其他服务器端恶作剧。 【参考方案1】:

*你的代码有几个问题,

1.添加触发ajax的事件。

2.您的 php 脚本不回显任何数据。

3.No return false 或防止defaul手动停止表单提交。(我认为这是主要问题)

检查解决方案:*

HTML:

    <form id="form">

    <input type="text" name="fname">
    <input type="text" name="lname">
    <input type="text" name="email">
    <input type="text" name="phone">
    <input type="text" name="comments">
    <input type="submit" name="submit" value="submit">

    </form>

    <span id="message"></span>

Javascript:

    $("#form").submit(function()

        var post = $('#form').serialize();
        console.log("POST DATA: " + post);
        $.post('target.php', post, function(data)
        document.getElementById('message').innerHTML = data;
        $('#message').slideDown('slow');
        $('#cform img.contact-loader').fadeOut('slow',function()$(this).remove());
        $('#submit').removeAttr('disabled');
        if(data.match('success') != null) $('#cform').slideUp('slow');

     );
    return false;
    )

PHP(我假设你的php脚本是target.php):

  $fname  = $_POST['fname'];
  $lname  = $_POST['lname'];
  $email = $_POST['email'];
  $phone = $_POST['phone'];
  $comments = $_POST['comments']; 

  echo $fname.$lname.$email.$phone.$comments;

【讨论】:

1.这个问题没有显示 ajax 是如何被触发的,但这显然是因为已经描述了函数的输出。 2. OP引用了他们在PHP中输入var_dump时看到的内容,因此它确实输出了数据,只是在问题中没有很好地表达。 3. 假设使用表单提交来触发提交……因为问题引用了 PHP 的输出,所以可能不是问题。 @Quentin 他的 php 脚本没有收到任何数据,这就是 var_dump() 显示空数组的原因。因为 ajax 没有使用 post 发送任何数据。由于未使用return false,Ajax 正在使用 get 发送数据。表单提交是手动执行的,因此 get 正在发送数据。你怎么能说他的 php 脚本正在发送数据呢?他根本没有使用任何回声。触发代码的事件在哪里? “Ajax 正在使用 get 发送数据,因为没有使用 return false。”——这根本没有任何意义。 “表单提交是手动执行的,因此 get 正在发送数据”——这是一个有趣的理论,但问题中没有足够的信息来确定情况是否如此。 “你怎么能说他的 php 脚本正在发送数据?他根本没有使用任何 echo”——因为 OP 显示了他们正在使用的 var_dump 代码及其输出。 “将触发代码的事件在哪里” - 不是在问题中,而是因为代码触发了...... @Quentin 如果我没有为表单设置方法并手动提交表单,该方法是什么?绝对GET。那么 $_POST 方法如何从 get 中获取数据呢?那么var_dump 会做什么呢? var_dump 不会发送任何数据。

以上是关于$.post 不向 php 脚本发送数据的主要内容,如果未能解决你的问题,请参考以下文章

Firefox 不向服务器发送 POST 数据

使用 mail() PHP 脚本的 jQuery AJAX 表单发送电子邮件,但来自 HTML 表单的 POST 数据未定义

在 Android 中发送 POST 数据

将 POST 数据从 Android 应用程序发送到 PHP MySQL

可以在收到所有 POST 数据之前启动 PHP 脚本吗?

无法接收 Vue 通过 axios 发送到 PHP 的 Post 数据