繁体   English   中英

jQuery不发送POST数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM