2014-02-08 150 views
0

所以通常我可以让我的ajax工作没有任何问题,但由于某种原因,我的脚本没有将变量传递到我的PHP表单。我一直试图调试一段时间,并希望一组新的眼睛可以指出我发生的任何愚蠢的错误(为简单起见,我将它剥离为骨骼,这不会传递变量)。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()

回答

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的其余部分要更加简洁明了。

+0

我甚至会更进一步'变种my_data = $(“#formid”)序列化();' – VIDesignz

+2

@VIDesignz我应该在我的答案中更清楚(现在更新更清晰),但是我原来的意图是打算进入原始发布的jQuery函数。在这个上下文中(在$ .ajax()内部),'$(this)'和'$('#formid')'是一样的''var my_data = $('#formid')。serialize )调用它是不同的)。感谢展示它虽然不够清楚! – David

1

您应该设置形式方法POST:

<form id="formid" method="post"> 
+0

这并不似乎是什么原因造成的错误\ – user934902

1

您的代码似乎是确定。 $(this).serialize()不应该是问题,但如果您这么认为,您可以给文本输入一个id并尝试data: {name: $('#your-input-id-here').val()}

另一件事可能是e.preventDefault();可能无法正常工作。尝试将它放在ajax调用之后,或者在ajax调用后将其替换为return false;

0

谢谢你们所有的回应,我不知道为什么,但是在ID前面添加表单让它工作。 $('form#formid')我必须有我的网页上重复的ID没有意识到