0

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

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

我正在使用 html/css/Jquery 从头开始​​重新编码所有内容。我特别喜欢 jquery 来创建动态表单。在用例中,客户向提供商提出与特定发票相关的新票证(事件)。由于一张发票可能包含几十个行项目,因此客户还可以指定一个或多个项目。在我的代码中,我在一个多数组中捕获所有这些,然后将其发布到一个 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方面对数据结构的理解可能存在缺陷。我还没有完全理解拥有一个数组对象、一个对象对象、一个对象数组或一个数组数组的整个想法。尽管如此,这可能与它有任何关系,也可能没有任何关系。

任何帮助深表感谢!

4

1 回答 1

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键将匹配字段中的名称

于 2013-01-06T22:52:10.327 回答