无法将多个数组从javascript发布到PHP中

时间:2013-01-06 22:03:22

标签: php jquery

我搜索了论坛,但没有找到任何与发布多个数组相关的具体示例。这是我的问题:

我正在为我的合作伙伴和我正在编写的应用程序进行前端编程。他已经完成了所有的后端工作,但也用PHP和HTML创建了一个工作原型前端(大约1991年的风格,使用表格进行定位......这是一个绝对的噩梦来阅读)。

我使用html / css / Jquery从头开始重新编码所有内容。我喜欢jquery特别用于创建动态表单。在用例中,客户正在向与特定发票相关的提供商提出新票证(事件)。由于发票可能包含许多行项目,因此客户也可以指定一个或多个项目。在我的代码中,我在多数组中捕获所有这些,然后我将POST发送到php页面进行处理。

我的问题是,我似乎无法找到在我喜欢的数据结构中从我的JS代码将数据发布到PHP的正确方法。

代码:

表单页


用户输入的每个项目都有几个字段。我将每个包装在一个字段集中。

$('.add_product').click(function(){
                    index++;
                    $(this).parent().parent().append("<fieldset>" +
                    "<label for='name'>Name</label><input type='text' alt='name' value='' id='" + this + "_name" + index + "'/>" +
                     "<label for='code'>Code</label><input type='text' alt='code' value='' id='" + this + "_code" + index + "'/>" +
                     "<label for='lotnumber'>Lot</label><input type='text' alt='lotnumber' value='' id='" + this + "_lotnumber" + index + "'/>" +
                     "<label for='expiration'>Expiration</label><input type='text' alt='expiration' value='' id='" + this + "_expiration" + index + "'/>" +
                     "<p class='remove_product'>Remove</p></fieldset>");

提交表单后,我将所有字段集选择为多数组,如下所示:

 var postValues={};
 var i=0;
                $('fieldset').each(function(){

                    postValues[i]={"VarChar08":"","VarChar07": $(this).parent().parent().attr('id'),"VarChar14":"P" , "VarChar09": $(this).find('input[alt="name"]').val(), "VarChar10": $(this).find('input[alt="code"]').val(), "VarChar11": $(this).find('input[alt="lotnumber"]').val(), "VarChar12": $(this).find('input[alt="expiration"]').val(),"VarChar13":"","VarChar20":"1"} ;
                    i++;

                });

我的最后一次尝试是将JSON字符串化数组:

var itemValues= JSON.stringify(postValues);

然后我将它们发布到php处理器页面:

 $.post("some.php", {items: itemValues}); 

PHP处理器页面


$itemValues=json_decode($_POST['items']);
$items = $itemValues;

// read into POST values for submitting to a stored procedure
foreach ($items AS $m => $tmp_items){
        $_POST['VarChar09'] = $items[$m][3]; // name
        $_POST['VarChar10'] = $items[$m][4]; // code
        $_POST['VarChar11'] = $items[$m][5]; // lot
        $_POST['VarChar12'] = $items[$m][6]; // expiry
}

不幸的是,这不起作用。 PHP处理器页面未正确读取数据结构,因此未正确分配值。我恐怕已经达到了我的经验极限。我怀疑从javascript方面我对数据结构的理解可能存在缺陷。我还没有能够理解拥有数组对象,对象对象,对象数组或数组数组的整个想法。尽管如此,这可能与也可能没有任何关系。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您的input元素存在一些问题。第一个this是您尝试连接到html字符串的DOM元素。

input个元素没有name,这是字段提交和创建$_POST的密钥所必需的

使用元素的name属性,您可以使用serialize()生成所有表单数据,而不是自己对数据对象进行硬编码。

var data=$('#formID').serialize();

 $.post("some.php", data, function(response){
     /* ajax success... do something with response if needed*/
 }); 

API参考:http://api.jquery.com/serialize/

现在,您的php $_POST键将匹配字段中的名称