【问题标题】:CodeIgniter / Ajax . Posting parameters through ajax to CodeIgniter controller代码点火器/阿贾克斯。通过 ajax 将参数发布到 CodeIgniter 控制器
【发布时间】:2017-06-06 19:52:06
【问题描述】:

我正在尝试通过 ajax 将一些变量发布到 CodeIgniter 控制器函数,但 ts 会导致错误消息。

这是我的 javascript 函数

$(document).ready(function()
 {

    $('.add_cart').click(function(){
      var quantity = $('#qty').val();
      var product_id = $(this).data("productid");
      var product_name = $(this).data("productname");
      var product_price = $(this).data("price");

      if(quantity != '' && quantity > 0)
          {
           $.ajax({
            url:"<?php echo base_url(); ?>products/add_product_to_cart",
            method:"POST",
            data:{product_id:product_id, product_name:product_name, product_price:product_price, quantity:quantity},
            success:function(data)
            {
                alert('success');
            }
           });
          }
          else
          {
           alert("Please Enter quantity");
          }

        });
      });

这是我的控制器功能。

    public function add_product_to_cart()
{

    echo $_POST["product_id"];

}

但是当我通过 firebug 跟踪整个过程时。它给出了未定义变量 product_id 的错误,或者当我尝试回显它时不打印任何东西,如下所示。

这是屏幕截图。

有人可以帮助我了解如何正确执行此操作,或者您需要为 ajax 函数包含任何特殊文件吗?

【问题讨论】:

    标签: php ajax codeigniter


    【解决方案1】:

    使用 Codeigniter(版本 2 或 3),您应该使用以下内容:

    $product_id = $this->input->post('product_id');
    

    这是在 Codeigniter 中使用输入时的文档:

    Using Codeigniter Inputs

    Ajax 请求(调试):

    如果您正在运行 ajax 调用,请在 Chrome 上转到 Inspector 并查看正在发送的 ajax 请求,这可以显示已发送到服务器的值。 (鼠标右键)

    Inspect -> Network (toggle on XHR)
    

    然后使用您的表单提交 ajax 请求,新项目应显示在网络选项卡的表格中,单击它,转到标题,然后向下滚动。它将向您显示您需要的所有信息以及您的 ajax 请求,并确保它们被正确发送。

    更新:

    正如 Kelvin 指出的,您需要将 ajax 从方法更新为请求类型。

    method:"POST"type:"POST"

    【讨论】:

    • 其实用$_POST是可以的,问题是post数据没有很好地传递给控制器​​,他的ajax请求有问题
    • @Kelvin 你是对的。 ajax 不正确。是的,使用直接服务器变量是可以的,但这就是框架的用途,安全性和易用性。
    【解决方案2】:
       var var_data = {product_id:product_id, 
                       product_name:product_name, 
                       product_price:product_price, 
                       quantity:quantity}
       $.ajax({
            url:"<?php echo base_url(); ?>products/add_product_to_cart",
            type:"POST",
            dataType : 'json',
            async : false,
            data:var_data,
            success:function(data)
            {
                alert('success');
            }
           });
    

    在控制器函数中从 var_data 中获取 post 数组

    喜欢

       $post_data = $this->input->post('var_data',true);
       print_r($post_data);
    

    像这样试试可能会有帮助,改变输入方法

    【讨论】:

      【解决方案3】:

      语法错误

      $(document).ready(function()
      {
      
      $('.add_cart').click(function(){
        var quantity = $('#qty').val();
        var product_id = $(this).data("productid");
        var product_name = $(this).data("productname");
        var product_price = $(this).data("price");
      
        if(quantity != '' && quantity > 0)
         {
             $.ajax({
              url:"<?php echo base_url(); ?>products/add_product_to_cart",
              method:"POST",
              data:{"product_id":product_id, "product_name":product_name, "product_price":product_price, "quantity":quantity},
              success:function(data)
              {
                  alert('success');
              }
             });
            }
            else
            {
             alert("Please Enter quantity");
            }
      
          });
        });
      

      参数应该是这样的 数据:{"product_id":product_id, "product_name":product_name, "product_price":product_price, "quantity":quantity},

      【讨论】:

      • 我觉得和你建议的一样。
      【解决方案4】:
      $.ajax({
         url:"<?php echo base_url(); ?>products/add_product_to_cart",
         type:"POST",
         data:{product_id:product_id, product_name:product_name, product_price:product_price, quantity:quantity},
         success:function(data)
         {
            alert('success');
         }
      );
      

      在您的 method : "POST" 中将其更改为 type: "POST", ajax 不使用与 html 相同的方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-25
        • 1970-01-01
        • 2018-05-15
        • 2018-07-04
        相关资源
        最近更新 更多