2

我正在使用 HMVC codeigniter。我第一次尝试使用 jquery ajax。当我使用 POST 时,它会在使用 GET 时响应我的数据时给出未定义的错误。

         $.ajax({
          type: "POST",
          url: filelink+"cart/add_cart_item",
          data: {"product_id":id,"quantity":qty,"ajax":"1"},
          dataType: "json",
              success: function(msg){
           alert( "Data Saved: " + msg );
           },
               error: function(jqXHR, textStatus, errorThrown){ 
           alert(textStatus + " " + errorThrown);
            }
      });

在谷歌搜索和 SO-ing- 之后我到目前为止所尝试的

  1. 我的文件 url 位置可以直接访问。我检查了它。给予回应。

  2. Firebug 为同一文件提供 500 个内部服务器错误。

  3. 使用 Get 对我的反应很好

  4. 在数据类型中添加 json

控制器功能

  class Cart extends CI_Controller { // Our Cart class extends the Controller class

  function __construct()
     {
    parent::__construct();  
    $this->template->set('controller', $this);
     }

  function _remap()
    {
       $uri2 = $this->uri->segment(2);  
       if (is_numeric($uri2) OR $uri2 == FALSE) {
        $this->index(); 
       } else if ($uri2 == 'add_cart_item') {
        $this->add_cart_item();
       } else if ($uri2 == 'show_cart') {
        $this->show_cart();
       }
     }

function add_cart_item(){
      echo "asdfsadfdsf";
      exit; 
    }
  }

有人可以帮帮我吗?

4

4 回答 4

0

您的问题有可能的原因

您可能正在使用未加载的模型。
模型中可能存在一些代码问题。
你可能不会从你的模型中返回任何东西并回显它。
此外,如果您需要返回数据,请使用 echo json_encode($data)

于 2012-06-28T12:29:13.523 回答
0

有时,当您将站点加载为https://example.com但 ajax 调用中的 url 是http://example.com时,有时会出现此问题。

于 2012-06-28T12:30:01.313 回答
0

设法找到解决方案。问题是由于 CI_TOKEN 与 FORM 一起发送的。那是不存在的,由于哪个 POST 方法给出了 500 内部服务器错误。我在我的视图文件中添加了以下内容。

 <?php echo form_open_multipart(); ?>
 <?php echo form_close(); ?>

并使用 ajax 发布请求发送 ci_token。

 var ci_token = formObj.find('input[name=ci_token]').val();
 var qty = 1;
 var dataString = 'product_id='+ id + '&quantity=' + qty + '&ajax=' + 1 
 +'&ci_token=' +            ci_token;

这解决了问题。我不确定,但这被称为 CSRF 相关的一些问题

谢谢

于 2012-06-29T12:41:47.597 回答
0

您已经使用了 _remap 函数,并且在获得 $uri2 之后,有一个 if 检查正在检查您在 ajax 请求中传递的数量变量,它可能具有整数值,因为显然可能包含一些整数。在那里

$this->uri->segment();

返回你:

product_id=id
quantity=qty
ajax=1

并且您通过调用获取值 2 即数量

$uri2 = $this->uri->segment(2); 

它会向您返回数量,并且您没有在代码中定义 index() 函数,它会给出 500 错误

function _remap()
{
   $uri2 = $this->uri->segment(2);  
   if (is_numeric($uri2) OR $uri2 == FALSE) {
    $this->index(); 
   } else if ($uri2 == 'add_cart_item') {
    $this->add_cart_item();
   } else if ($uri2 == 'show_cart') {
    $this->show_cart();
   }
 }
于 2012-07-02T08:09:39.650 回答