带有数据的$ .post会返回HTTP 500错误

时间:2011-12-15 16:31:36

标签: jquery codeigniter

我目前正在使用框架CodeIgniter开发一个项目。我使用jQuery 1.7.1,我想用数据实现ajax调用来添加帖子消息。

奇怪的是该函数工作并返回警报消息而没有额外的数据。但是带有数据的函数会返回HTML 500错误(在Chrome控制台中)。

请求的页面只不过是一个回复'It works!'的PHP脚本。

有效的代码:

$.post("/ajax/add_post_to_profile",
            function(data) {
                alert("Data Loaded: " + data);
});

不起作用的代码:

$.post("/ajax/add_post_to_profile", { msg: "My test msg!"},
            function(data) {
                alert("Data Loaded: " + data);
        });

UPDATE:

这里是处理请求页面的codeigniter控制器:

class PostController extends CI_Controller {

    public function __construct(){
        parent::__construct();
    }

    public function addPostToProfile() {     
        echo 'It works!!!';
    }
}

更新2:

我已经使用放置在应用根目录中的新文件请求测试了该函数。然后它就像一个魅力。

看起来CodeIgniter控制器正在阻止POST请求或其他东西..

更新3:

我发现它是CodeIgniter的CSRF安全性。当我把它关掉时它会起作用。 我在互联网上搜索了一个保留CSRF的解决方案,但我找到的代码不起作用:(。

<script>
    $('#ajax_test').click(function() {
        $.post("/ajax/add_post_to_profile", { msg: "My test msg!", csrf_token_name: "<?php echo $this->security->get_csrf_hash(); ?>"},
            function(data) {
                alert("Data Loaded: " + data);
        });
    });
</script>

3 个答案:

答案 0 :(得分:0)

检查您的site_urladd_post_to_profile文件是否有错误。否则jquery函数没有错误

答案 1 :(得分:0)

只需快速更新vars就可以了,它只是尝试过,非常感谢你;)

<script>

   var csrf_token_name = "<?php echo $this->security->get_csrf_token_name(); ?>";
   var csrf_hash = "<?php echo $this->security->get_csrf_hash(); ?>";

    $('#ajax_test').click(function() {
        $.post("/ajax/add_post_to_profile", { msg: "My test msg!", csrf_token_name:csrf_hash},
            function(data) {
                alert("Data Loaded: " + data);
        });
    });
</script>

现在功能正常,启用CSRF!谢谢你的帮助!

答案 2 :(得分:0)

如果您使用CSRF安全性,则应序列化表单数据!

$('#ajax_test').click(function() {
    ...
    data: jQuery('#theForm').serialize(),
    ...