我将在ajax调用的帮助下使用点击按钮将多个复选框和文本框的值发布到php页面。在html中我有:
<input type="text" name="field1" id="field1" />
<input type="text" name="field2" id="field2" />
<input type="checkbox" name="params[]" id="params" class="params" value="Value1">Value1<br>
<input type="checkbox" name="params[]" id="params" class="params" value="Value2">Value2<br>
<input type="button" value="get parameters" id="getparams" name="getparams"/><p>
<div id="response"></div>
在jscript中我有:
$(document).ready(function(){
$("#getparams").click(function(){
var field1 = $("#field1").val();
var field2 = $("#field2").val();
var params = {'params[]' : []};
$(":checked").each(function() {
params['params[]'].push($(this).val());
});
var datastr = '&field1=' + field1 + '&field2=' + field2 + '¶ms=' + params;
$.ajax({
type: "POST",
url: "page.php",
data: datastr,
cache: false,
success: function(html){
$("#response").fadeIn("slow");
$("#response").html(html);
}
});
return false;
});
});
因此,我将复选框值推入数组(params),将文本框值转换为单独的变量(field1,field2)。在php中我可以访问field1,field2
但我无法访问数组params
。
echo $_POST['field1'];// I can access..
echo $_POST['params']; // I get [object Object] response
这里有什么问题?
答案 0 :(得分:0)
你的params数组(被认为是一个对象)需要序列化才能将它添加到datastr变量中。
更简单的方法是使用.submit函数,它可以为您完成所有繁重的工作:http://api.jquery.com/submit/
答案 1 :(得分:0)
我无法使用serialize
方法解决此问题,但以下方法可以正常工作。
如果我用:
<input type="checkbox" name="params" class="parameters" value="Value1">Value1<br>
<input type="checkbox" name="params" class="parameters" value="Value2">Value2<br>
要确定在jQuery中检查哪些输入元素,我可以使用:
var params='';
$('.parameters:checked').each(function(){
params=params+','+$(this).val();
});
而不是:
var params = {'params[]' : []};
$(":checked").each(function() {
params['params[]'].push($(this).val());
})
在PHP中,如果我使用$_POST['params']
,我会得到类似,value1,value2
的内容,然后可以substr($_POST['params'],1)
修剪或者如果我想获得一个数组我可以使用explode(',',$_POST['params']);
然后使用删除第一个空元素
array_slice($params,1)