使用ajax调用传递不同类型的变量

时间:2014-09-09 17:44:06

标签: javascript php jquery ajax

我将在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 + '&params=' + 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

这里有什么问题?

2 个答案:

答案 0 :(得分:0)

你的params数组(被认为是一个对象)需要序列化才能将它添加到datastr变量中。

更简单的方法是使用.submit函数,它可以为您完成所有繁重的工作:http://api.jquery.com/submit/

答案 1 :(得分:0)

我无法使用serialize方法解决此问题,但以下方法可以正常工作。 如果我用:

重写html复选框
<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)