我有一张表格
<form method="post">
<input type="text" name="name" /><br />
<input type="text" name="test1" /><br />
<input type="text" name="test2" /><br />
<input type="text" name="test3" /><br />
<input type="text" name="test4" /><br />
<input type="text" name="test5" /><br />
<input type="text" name="test6" /><br />
<input type="submit" name="submit" /><br /></form>
我写了一个像这样的jquery ajax脚本
$(":input[ name= 'submit']").click(function(){
var values = $("form").serialize();
$.ajax({
url:"test.php",
type:"post",
dataType:"json",
data: {
method: "test",
data: values
},
success: function(){
alert("success");
},
error:function(){
alert("failure");
}
});
return false;
});
data: { method: "test", data: values }
但是当我在ajax.data元素中传递两个参数时,我无法在服务器端以$ _POST ['name']或$ _POST ['test1']的形式访问它。但是,如果我只向ajax.data元素添加一个参数,那么这是可能的。
请给我一个解决方案
答案 0 :(得分:2)
.serialize方法已将表单值转换为必须按原样发送到服务器的键/值对。如果要传递其他值,可以在表单中使用隐藏字段。
像这样:
<form method="post">
<input type="hidden" id="method" name="method" value="test" />
<input type="text" name="name" /><br />
<input type="text" name="test1" /><br />
<input type="text" name="test2" /><br />
<input type="text" name="test3" /><br />
<input type="text" name="test4" /><br />
<input type="text" name="test5" /><br />
<input type="text" name="test6" /><br />
<input type="submit" name="submit" /><br />
</form>
然后:
$('form').submit(function() {
var values = $(this).serialize();
$.ajax({
url: "test.php",
type: "post",
dataType: "json",
data: values,
success: function(){
alert("success");
},
error:function(){
alert("failure");
}
});
return false;
});
如果您需要在发送AJAX请求之前设置其他值:
$('#method').val('some other value');
另请注意,我订阅了表单的.submit事件而不是提交按钮的click事件,当用户在某些输入元素内按下Enter键时,它也会正确处理这种情况,而您的代码将不会被触发,因为从未点击过提交按钮,但表单已提交。
答案 1 :(得分:1)
你应该做
data: values,
通过这种方式,您可以获取数据$_POST['test1']
;
如果您需要使用隐藏字段发送额外数据
编辑如果你使用两个字段,例如你的例子中$_POST['data']
(这里你将有序列化表格)和$_POST['method']
编辑2实际上$_POST['data']
是一个字符串(name=abc&test1=&test2=&test3=&test4=&test5=&test6=
)因为字符串设置为服务器,如果你访问$_POST['data']['name']
,这会返回n
,因为在php中你可以访问字符串作为数组,在您的情况下,您没有传递有效的索引,它返回第一个字符
$name = "aghjsghjgj";
echo $name['name'];//this echoes the first letter as name is not a valid index
echo $name[2];//this echoies the third letter , h