jQuery不发送POST数据

时间:2012-01-08 01:18:20

标签: javascript jquery forms variables post

所以我在一个完全基于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变量没有通过。有人想帮忙吗?

6 个答案:

答案 0 :(得分:3)

这适用于a Fiddle

您确定fullpath是全局定义的吗?我没有在您的代码中看到任何其他可能的错误来源。

修改:我可以从您的评论中看到实际问题:301重定向don't work through POST

如果收到301状态代码以响应GET或HEAD以外的请求,则用户代理不得自动重定向请求,除非用户可以确认,因为这可能会改变条件请求已发出。

您需要删除此重定向内容,因此"pages/" + fullpath直接指向PHP脚本。这也可能是您的服务器配置问题。

如果是Apache,您可能还想查看this SO question

答案 1 :(得分:1)

我将你的代码段打包在一个html文件中,它对我有用,所以问题必须在你的代码中的其他地方。 (来源:http://pastebin.com/y4Dfsepv

答案 2 :(得分:0)

您尚未在表单中指定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)

答案 3 :(得分:0)

**编辑,因为我们已经了解到服务器返回了301重定向代码**

请参阅:[dev-tricks.net/post-data-lost-on-301-moved-permanently]

301重定向丢失了POST的内容。所以jQuery正在发送它,但是服务器将它重定向到脚本的正确位置而没有POST数据。您需要弄清楚脚本的正确位置,并在jquery调用中指定它以避免重定向。

答案 4 :(得分:0)

你需要有机会直接链接。“pages /”+ fullpath。这是一个问题,发布时ajax无法识别您的链接

答案 5 :(得分:-1)

您的表单中没有method =“POST”。