[英]jQuery not sending POST data
所以我在一个完全基于AJAX的网站上有一个非常简单的表单来加载它的页面。 这种形式工作的唯一方法是它也可以做一些AJAX魔术,所以我开始着手这样做。 我测试了表格,所以我知道这一切都奏效了。
这是我的表单的javascript。 变量“fullpath”只是告诉我此刻加载了哪个页面,所有页面都存储在本地“pages”目录中。 它将表单序列化并将其发送到服务器,并提供一些调试警报。
$(document).ready(function() {
$("#regForm").submit(function(event) {
alert($(this).serialize());
$.post("pages/" + fullpath, $(this).serialize(), function(data){
alert(data);
});
return false;
});
});
这是形式本身
<form name="input" id="regForm">
<div class="form-field"><label>Username</label> <input type="text" name="username"/></div>
<div class="form-field"><label>Password</label> <input type="password" name="password"/></div>
<div class="form-field"><label>Confirm Password</label> <input type="password" name="password2"/></div>
<div class="form-field"><label>Screen Name</label> <input type="text" name="screenname"/></div>
<div class="form-field"><label>Email Address</label> <input type="text" name="address"/></div>
<div class="form-field"><label>Group</label> <select name="usergroup">
<option value="0">Superuser</option>
<option value="1">Admin</option>
<option value="2">Moderator</option>
<option value="3">Advmember</option>
<option value="4">Member</option>
<option value="5">Guest</option>
</select> <br />
<label>Submit: </label><input type="submit" value="Submit" />
</div>
</form>
这是我在页面开头放的一些PHP
print_r($_POST);
所以我填写了一些虚假信息表格,然后按提交。 所有数据都显示在
alert($(this).serialize());
然后调用成功,我看到加载的表单与我的
alert(data);
但是,我要求在PHP中打印$ _POST数组,这就是我得到的
Array ()
所以jQuery正在发送数据,它正在恢复页面,但由于某种原因,POST变量没有通过。 有人想帮忙吗?
这适用于小提琴 。
您确定全局定义了 fullpath
吗?我没有在您的代码中看到任何其他可能的错误来源。
编辑 :我可以从您的评论中看到实际问题:301重定向无法通过POST工作 :
如果收到301状态代码以响应GET或HEAD以外的请求,则用户代理不得自动重定向请求,除非用户可以确认,因为这可能会改变发出请求的条件。
你需要删除这个重定向的东西,所以"pages/" + fullpath
直接指向PHP脚本。 这也可能是您的服务器配置问题。
在Apache的情况下,您可能还想看看这个SO问题 。
我将你的代码段打包在一个html文件中,它对我有用,所以问题必须在你的代码中的其他地方。 (来源: http : //pastebin.com/y4Dfsepv )
你需要机会直接链接。“pages /”+ fullpath。 这是一个问题,当你发帖时,ajax无法识别你的链接
您尚未在表单中指定method =“post” 。 如果未指定,则默认情况下变为method =“get”。 所以$ _POST中没有值,你可以print_R($ _ GET),你会在那里看到值。
更改以下行:
<form name="input" id="regForm">
至:
<form name="input" id="regForm" method="post">
更新:
根据评论更新答案。 $ .post中的“pages /”+ fullpath可能指向错误的页面,尝试提醒它并检查firebug中的服务器响应。 确保它指向您想要的页面,否则使用php脚本的完整路径,如下所示:
$.post("http://localhost/pages/" + fullpath, $(this).serialize(), function(data)
**编辑因为我们已经知道服务器返回了301重定向代码**
请参阅: https : //mdk.fr/blog/post-data-lost-on-301-moved-permanently.html
301重定向丢失POST的内容。 所以jQuery正在发送它,但是服务器将它重定向到脚本的正确位置而没有POST数据。 您需要确定脚本的正确位置,并在jquery调用中指定以避免重定向。
您的表单中没有method =“POST”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.