不能在Codeigniter中使用AJAX进行POST

时间:2018-05-03 04:00:27

标签: javascript php jquery ajax codeigniter

希望我在这里可能忽略了一些东西。我一直在寻找,找不到解决方案。

在CI中,我尝试在onClick事件中通过AJAX进行POST。触发时,事件应将项目添加到购物车。

我的Javascript如下:

function addToCart(id) {

    var productID = id;
    var qty = 1;


    $.ajax({
        url : "/menu/add/"
        type : "POST",
        dataType : "json",
        data : {"productid" : productID, "qty" : qty},
        success : function(data) {
            alert(data);
        },
        error : function(data) {
            alert(data);
        }
    });
}

在我的Menu控制器中,add函数如下所示:

public function add(){
    if (isset($_POST['productid']) && 
        isset($_POST['qty'])       &&
        is_numeric($_POST['qty'])  &&
        $this->product_model->isValidProductId($_POST['productid']) 
        ){
            $productData = array(
               'product_id'   => $_POST['productid'],
               'product_qty'  => $_POST['qty']
            );

            $cart_array = $this->session->userdata('cart');

            array_push($cart_array, $productData);
            $this->session->set_userdata('cart', $cart_array);
        }
}

我这样称呼函数:

<h1 onclick="addToCart(23)">OTown Cafe Menu- Click an item to add it to your order!</h1>

无法从ajax触发成功或错误,但是如果我在触发ajax之前或之后发出警报。有人看到我做错了吗?

2 个答案:

答案 0 :(得分:0)

  

您正在使用dataType:“json”,所以您必须返回json

public function add(){
    if (isset($_POST['productid']) && 
        isset($_POST['qty'])       &&
        is_numeric($_POST['qty'])  &&
        $this->product_model->isValidProductId($_POST['productid']) 
        ){
            $productData = array(
               'product_id'   => $_POST['productid'],
               'product_qty'  => $_POST['qty']
            );

            $cart_array = $this->session->userdata('cart');

            array_push($cart_array, $productData);
            $this->session->set_userdata('cart', $cart_array);
        }
                $arr['success'] = 1;
                print json_encode($arr);
                exit;
}

查看

function addToCart(id) {

    var productID = id;
    var qty = 1;


    $.ajax({
        url : "/menu/add/",
        type : "POST",
        dataType : "json",
        data : {"productid" : productID, "qty" : qty},
        success : function(arr) {
      if(arr.success==1){
            alert('yes');
        },
        error : function(arr.error==1) {
            alert('no');
        }
    });
}

答案 1 :(得分:0)

你错过了,在网址之后:

url : "/menu/add/",

尝试此回复:

public function add(){
    if (isset($_POST['productid']) && 
        isset($_POST['qty'])       &&
        is_numeric($_POST['qty'])  &&
        $this->product_model->isValidProductId($_POST['productid']) 
        ){
            $productData = array(
               'product_id'   => $_POST['productid'],
               'product_qty'  => $_POST['qty']
            );

            $cart_array = $this->session->userdata('cart');

            array_push($cart_array, $productData);
            $this->session->set_userdata('cart', $cart_array);
            return json_encode(['status'=>'success','msg'=>'Message here','data'=>[]]);
        } else {
            return json_encode(['status'=>'error','msg'=>'Please send all details','data'=>[]]);
        }
}

看看它是否适合你。

JS:

function addToCart(id) {

    var productID = id;
    var qty = 1;


    $.ajax({
        url : "/menu/add/"
        type : "POST",
        dataType : "json",
        data : {"productid" : productID, "qty" : qty},
        success : function(data) {
            if (data.status == 'Success') {
                alert('data.status');
            } else{
                alert('data.status');
            }
        },
        error : function(data) {
            alert(data);
        }
    });
}