5

我在使用 codeigniter 和 JQuery Ajax Post 时遇到问题。

我的 javscript

        $('.remove').click(function(){
        var category=event.target.id;
        var id=$('input[name=article_id]').val();
        var p={};
        p['id']=id;

        $.ajax({
            type: "POST",
            url: "/backend.php/blog/removeCategories",
            async:true,
            cache:false,
            data: {id: id, category: category }
            }).done(function(msg){
                jQuery('#category_list').load('/backend.php/blog/refreshCategories/',p,function(str){});
            });

我的 codeigniter 的控制器

 function removeCategories(){
        $id=$_POST['id'];
        $category_id=$_POST['category'];

        $this->article->removeCategory($category_id,$id);
    }

我无法让 ajax 函数工作,因为总是从服务器收到错误 500。虽然,firebug 返回加载资源时出错,但函数 removeCategories 还是被执行了。

4

3 回答 3

6

data通过对选项进行以下更改,确保您的数据正确传递。

$.ajax({
            type: "POST",
            url: "/backend.php/blog/removeCategories",
            async:true,
            cache:false,
            data: {"id": id, "category": category }
            }).done(function(msg){
                jQuery('#category_list').load('/backend.php/blog/refreshCategories/',p,function(str){});
            });

按照您的编码方式,每个键值对的键都设置为变量的值。

于 2012-05-11T13:44:06.307 回答
3

您的错误可能在模型中。使用 chrome dev toolkit 找出返回的页面内容是什么。HTTP CODE 500表示服务器错误,通常是由于 PHP 中某处的语法问题。

此外,在您的 ajax 调用中,您应该使用success:and error:。如果代码抛出错误,这将允许您停止执行。

你为什么打电话backend.php/你不使用index.php

另一种方法是代替使用.load(),您可以简单地从控制器传回 html,然后success: function(data){}将其附加到容器中。这将允许您监视 ajax 调用是否为error()orsuccess()并采取相应的行动。

于 2012-05-11T13:47:07.783 回答
2

在 Codeigniter 中,如果您在配置中激活了 csrf_protection,它将返回错误 500!

要解决这个问题,您必须发送 csrf 值。

例子:

$.ajax({
          type: "POST",
          url: "http://example.com",
          data: {
                 '<?php echo $this->security->get_csrf_token_name(); ?>' : 
                 '<?php echo $this->security->get_csrf_hash(); ?>'
                }
       });
于 2014-06-12T17:50:42.553 回答