Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Codeigniter购物车:如何使用ajax和jquery添加多个项目_Codeigniter_Jquery_Shopping Cart - Fatal编程技术网

Codeigniter购物车:如何使用ajax和jquery添加多个项目

Codeigniter购物车:如何使用ajax和jquery添加多个项目,codeigniter,jquery,shopping-cart,Codeigniter,Jquery,Shopping Cart,我正在用Codeigniter构建一个基于ajax的购物车,添加/删除功能可以完美地工作。我现在正在尝试添加一个用于添加多个项目的选项,但无法使其工作 这是我正在使用的标记。我不确定它是否是最好的设计,但它使用的是非ajax函数,所以我想应该可以 <form action="cart/add_multiple" method="post" accept-charset="utf-8"> <input type="hidden" name="items[0][id]" value

我正在用Codeigniter构建一个基于ajax的购物车,添加/删除功能可以完美地工作。我现在正在尝试添加一个用于添加多个项目的选项,但无法使其工作

这是我正在使用的标记。我不确定它是否是最好的设计,但它使用的是非ajax函数,所以我想应该可以

<form action="cart/add_multiple" method="post" accept-charset="utf-8">
<input type="hidden" name="items[0][id]" value="3571310" />
<input type="hidden" name="items[0][qty]" value="1" />
<input type="hidden" name="items[0][price]" value="59.00" />
<input type="hidden" name="items[0][name]" value="London" />
<input type="hidden" name="items[0][heb_name]" value="לונדון" />
<input type="hidden" name="items[0][full_price]" value="59.00" />
<input type="hidden" name="items[0][discount_price]" value="59.00" />

<input type="hidden" name="items[1][id]" value="7397903" />
<input type="hidden" name="items[1][qty]" value="1" />
<input type="hidden" name="items[1][price]" value="29.00" />
<input type="hidden" name="items[1][name]" value="London Triple" />
<input type="hidden" name="items[1][heb_name]" value="לונדון טריפל" />
<input type="hidden" name="items[1][full_price]" value="29.00" />
<input type="hidden" name="items[1][discount_price]" value="29.00" />
<input type="submit" name="add_multi" value="add to cart"  /></form>
但是它不起作用,因为
add\u multiple
函数以字符串而不是数组的形式接收数据。我是否必须以某种方式解码数据以将其转换为数组?希伯来人的角色会挡道把事情搞砸吗


我应该说,当以常规方式发布表单时,在没有ajax的情况下,会将项目添加到购物车中,并且一切都很好。那么,普通帖子和ajax帖子有什么区别呢?

好吧,我成功地实现了这一点,但我不确定这是否是最优雅的方式

以下是我所做的:

在ajax脚本中,我更改了
var items=$(this).serialize()
to
var items=$(this.serializeArray()。我现在得到的是数组而不是字符串,但它不是我需要插入购物车的格式。所以我循环这个数组以创建一个所需格式的数组,并使用这个新数组插入购物车

这是我在购物车控制器下的添加功能:

 function add_multiple()
{
    $items = $this->input->post('items');
    $ajax = $this->input->post('ajax');

    // Check if user has javascript enabled
    if($ajax != '1'){
        $this->cart->insert($items); //if posted the regular non-ajax way, the fields will be in an array in the correct format
        echo 'false';
        redirect('cart'); // If javascript is not enabled, reload the page with new data
    }else{

        $i = 0;
        foreach($items as $key=>$form_field)
        {
            $field_name = $form_field['name'];
            $from_char = strrpos($field_name, '[') +1 ;
            $length = strlen($field_name)-$from_char-1;
            $field = substr($field_name,$from_char,$length);

            $data[$i][$field] = $form_field['value'];
            if ($field == "discount_price") $i+=1; // I know 'discount price' is always the last field
        }

        $this->cart->insert($data);

        echo 'true'; // If javascript is enabled, return true, so the cart gets updated
    }
}
 function add_multiple()
{
    $items = $this->input->post('items');
    $ajax = $this->input->post('ajax');

    // Check if user has javascript enabled
    if($ajax != '1'){
        $this->cart->insert($items); //if posted the regular non-ajax way, the fields will be in an array in the correct format
        echo 'false';
        redirect('cart'); // If javascript is not enabled, reload the page with new data
    }else{

        $i = 0;
        foreach($items as $key=>$form_field)
        {
            $field_name = $form_field['name'];
            $from_char = strrpos($field_name, '[') +1 ;
            $length = strlen($field_name)-$from_char-1;
            $field = substr($field_name,$from_char,$length);

            $data[$i][$field] = $form_field['value'];
            if ($field == "discount_price") $i+=1; // I know 'discount price' is always the last field
        }

        $this->cart->insert($data);

        echo 'true'; // If javascript is enabled, return true, so the cart gets updated
    }
}