通常我可以让我的ajax工作没有任何问题但是由于某种原因我的脚本没有将变量传递到我的PHP表单。我一直试图调试一段时间,并希望一组新的眼睛可以指出我发生的任何愚蠢的错误(为了简单起见,我将它剥离为裸骨,这不会传递变量)。
AJAX + FORM
$('#formid').on('submit', function(e){
e.preventDefault();
$.ajax({
type: "POST",
url: 'page.php',
data: $(this).serialize(),
success: function(data) {
alert(data);
}
});
});
<form id="formid" method="post">
<input type="text" name="name">
<input type="submit" value="Add">
</form>
page.php文件
//Get Variables
$name = $_POST['name'];
echo 'Name is: '.$name;
这应显示一个警告,其中显示“名称是(用户放入表单中的任何内容)”但是它不会回显用户在表单中提交的内容。任何人都可以看到这个脚本有问题吗?
将数据发回php页面data: $(this).serialize()
答案 0 :(得分:2)
代码看起来很干净,但是在ajax函数中执行$(this).serialize()
时可能存在上下文问题。最好先将数据保存到变量中。结果看起来像这样:
$('#formid').on('submit', function(e){
e.preventDefault();
var my_data = $(this).serialize();
$.ajax({
type: "POST",
url: 'page.php',
data: my_data,
success: function(data) {
alert(data);
}
});
});
如果这不起作用,那么它实际上可能是PHP方面的问题。
编辑:添加JS的其余内容更简洁明了。
答案 1 :(得分:1)
您应该将表单方法设置为POST:
<form id="formid" method="post">
答案 2 :(得分:1)
您的代码似乎没问题。 $(this).serialize()
不应该是问题,但如果你这么认为,你可以给文字输入一个id并尝试data: {name: $('#your-input-id-here').val()}
。
另一件事可能是e.preventDefault();
可能无法正常工作。尝试在ajax调用之后放置它,或者在ajax调用之后用return false;
替换它。
答案 3 :(得分:0)
感谢您的所有回复,我不知道为什么,但在ID前添加表单使其工作。 $('form#formid')
我的页面上必须有重复的ID而未实现