$.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 脚本发送数据的主要内容,如果未能解决你的问题,请参考以下文章
使用 mail() PHP 脚本的 jQuery AJAX 表单发送电子邮件,但来自 HTML 表单的 POST 数据未定义