【问题标题】:jQuery POST rows of form datajQuery POST 表单数据行
【发布时间】:2012-08-23 01:40:28
【问题描述】:

我正在尝试向我的照片库添加一个简单的购物车系统,目前我正在创建一种简单的方法来更新所选产品的类型和数量。但是我在处理 PHP 端的数据时遇到了问题。

因为我正在发送具有相同字段名称的行,所以 PHP 会覆盖数据以仅创建 1 个数组。理想情况下,我希望它在 PHP 中变成这样;

array(item, product, quantity), 
array(item, product, quantity), 
array(item, product, quantity)

最好的处理方法是什么。

  1. 使用某种唯一标识符创建字段名称,然后让 PHP 重新处理 post 数组。
  2. 用 JS 创建数组,然后将它们作为数组作为一行发送,所以在我的例子中是 3 个数组。不确定它是否会工作,因为它会在 POST 期间转换回字符串?
  3. 以“item_gallery_id”字段为键创建帖子数组的某种方式?
  4. 我已经坚持了好几个小时,为了一些我认为很简单的事情,我已经尝试了一切:(

POST 参数

cart_id 1
item_gallery_id 6
item_gallery_id 3
item_gallery_id4
product_options 12
product_options 12
product_options 12
quantity    1
quantity    1
quantity    1

我有以下 HTML

<form id="order_photo_form">
<table width="100%" border="0">
  <thead>
    <tr>
      <th>Item</th>
      <th>Album/Item</th>
      <th>Product/Price</th>
      <th>Quantity</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <input class="form_data" name="item_gallery_id" value="6" type="hidden">
      <td><img src="img" width="100"></td>
      <td>Item</td>
      <td><select class="form_data" name="product_options">
          <option value="12">Canvas 100x150cm - $550</option>
          <option value="11">Canvas 100x100cm - $350</option>
        </select></td>
      <td><select class="form_data" name="quantity">
          <option value="1">1</option>
          <option value="2">2</option>
          <option value="3">3</option>
          <option value="4">4</option>
          <option value="5">5</option>
        </select></td>
    </tr>
    <tr>
      <input class="form_data" name="item_gallery_id" value="3" type="hidden">
      <td><img src="img" width="100"></td>
      <td>Item</td>
      <td><select class="form_data" name="product_options">
          <option value="12">Canvas 100x150cm - $550</option>
          <option value="11">Canvas 100x100cm - $350</option>
    </select></td>
      <td><select class="form_data" name="quantity">
          <option value="1">1</option>
          <option value="2">2</option>
          <option value="3">3</option>
          <option value="4">4</option>
          <option value="5">5</option>
        </select></td>
    </tr>
    <tr>
      <input class="form_data" name="item_gallery_id" value="4" type="hidden">
      <td><img src="img" width="100"></td>
      <td>Item</td>
      <td><select class="form_data" name="product_options">
          <option value="12">Canvas 100x150cm - $550</option>
          <option value="11">Canvas 100x100cm - $350</option>
        </select></td>
      <td><select class="form_data" name="quantity">
          <option value="1">1</option>
          <option value="2">2</option>
          <option value="3">3</option>
          <option value="4">4</option>
          <option value="5">5</option>
        </select></td>
    </tr>
  </tbody>
</table>
</form>

然后是一些简单的 jQuery;

$.ajax({
   url: "ajax.php?update_cart",
   type: "POST",
   data: $('#order_photo_form').serialize(),
      success: function(data){
         $.jGrowl(data, { life: 10000 });                           
      },
});

谢谢。

【问题讨论】:

  • 您可能需要将包含嵌套 JSON 对象的 JSON 对象发送到您的 PHP 脚本。然后在 PHP 脚本中使用 json_decode() 将 JSON 对象放入单独的数组中。
  • jQuery 是否有一个与 jQuery.parseJSON 相反的内置函数?编辑:JSON.stringify >.

标签: php javascript jquery ajax arrays


【解决方案1】:

您应该通过添加 id/counter 为表单元素赋予唯一的名称,然后循环遍历 post 数组以读取您发布的数据并进行处理。

确切的代码取决于您如何准确地确定表单字段名称,但假设您使用了一个从 1 开始并以 1 递增的计数器,您可以在您的 php 脚本中执行类似的操作(未经测试,但向您展示了这个想法):

$orders = array();

for($i=1;array_key_exists($_POST, "item_gallery_id" . $i);$i++){
    //read the values and store them
    $newOrder = array(
        "id" => $_POST['item_gallery_id' . $i],  
        "options" => $_POST['product_options' . $i],  
        "quantity" => $_POST['quantity' . $i]
    );        

    array_push($orders, $newOrder);
}

【讨论】:

    【解决方案2】:

    您可以执行以下操作:

    <form id="form" name="form" action="">
      <input name="items[]" type="text" id="item_1" />
      <input name="items[]" type="text" id="item_2" />
    </form>
    

    现在$_POST['items'] 是一个数组,你可以循环遍历它:

    for ($i = 0; $i < count($_POST['items']); $i++) {
        $item = $_POST['items'][$i];
    }
    

    但是,这仅适用于 PHP,如果您想在 JavaScript 中引用元素,则必须执行以下操作:document.getElementsByName('items[]')。正如您在 JavaScript 中看到的,括号是名称的一部分,而在 PHP 中,它们表示该值是一个数组。

    【讨论】:

      猜你喜欢
      • 2011-08-11
      • 2021-01-17
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 2012-09-08
      • 2014-12-19
      相关资源
      最近更新 更多