Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery $.post with data返回HTTP 500错误_Jquery_Codeigniter - Fatal编程技术网

Jquery $.post with data返回HTTP 500错误

Jquery $.post with data返回HTTP 500错误,jquery,codeigniter,Jquery,Codeigniter,我目前正在使用框架CodeIgniter进行一个项目。我使用jQuery1.7.1,我想用数据实现一个ajax调用,以添加一条post消息 奇怪的是,该函数在没有额外数据的情况下工作并返回警报消息。但是带有数据的函数返回一个HTML500错误(在chrome的控制台中) 请求的页面只是一个响应“Itworks!”的php脚本 有效的代码: $.post("/ajax/add_post_to_profile", function(data) {

我目前正在使用框架CodeIgniter进行一个项目。我使用jQuery1.7.1,我想用数据实现一个ajax调用,以添加一条post消息

奇怪的是,该函数在没有额外数据的情况下工作并返回警报消息。但是带有数据的函数返回一个HTML500错误(在chrome的控制台中)

请求的页面只是一个响应“Itworks!”的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);
        });
更新: 这里是处理请求页面的codeigniter控制器:

class PostController extends CI_Controller {

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

    public function addPostToProfile() {     
        echo 'It works!!!';
    }
}
更新2: 我已经在应用程序根目录中放置了一个新的文件请求,并对该功能进行了测试。然后它就像一个符咒

看起来CodeIgniter控制器正在阻止POST请求或其他内容

更新3: 我发现这是CodeIgniter的CSRF安全性。当我关掉它的时候它就工作了。 我在互联网上搜索了一个保存CSRF的解决方案,但我找到的代码不起作用:(


$('#ajax_test')。单击(函数(){
$.post(“/ajax/add_post_to_profile”,{msg:“我的测试消息!”,csrf_令牌名称:”,
功能(数据){
警报(“数据加载:”+数据);
});
});

检查您的
站点\u url
将\u post\u添加到\u profile
文件中一定有问题。否则jquery功能没有问题

只需使用vars进行快速更新,即可正常工作,非常感谢;)


var csrf_token_name=“”;
var csrf_hash=“”;
$('#ajax_test')。单击(函数(){
$.post(“/ajax/add_post_to_profile”,{msg:“我的测试msg!”,csrf_token_name:csrf_hash},
功能(数据){
警报(“数据加载:”+数据);
});
});

现在,在启用CSRF的情况下,该功能可以正常工作!谢谢你的帮助

如果在上使用CSRF安全,则应序列化表单数据

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

1) 您的代码在浏览器中的实际呈现方式是什么?2)您是否检查了Web服务器日志,试图找到服务器错误的解释?此/ajax/add_post_to_profile中包含的内容是什么?1)如果您的意思是这样,则请求的页面呈现正确。2) 错误日志没有显示任何错误,访问日志显示500错误。@Ricardoaruda我用控制器代码更新了问题。-1因为没有提供关于如何实际调用类和方法的关键信息。我已经尝试添加site_url helper函数,但它只给出了相同的错误。为什么我必须这样做?如果我正确理解jQuery()中的信息,那么它只会创建一个包含表单所有元素的字符串(field1=val1&field2=val2等),因为Codeigniter会在表单中添加一个隐藏的输入,您应该传递该输入以使其工作。我已经通过将令牌名称添加为带有令牌哈希的post字段解决了这个问题。您可以实现同样的效果,用更好的方式,用我的答案。@Chumillas:你能告诉我表单标记的语法吗?我在试图解决这个问题时遇到了同样的问题。@ram如果您想使用CI语法,请遵循以下url
<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>
$('#ajax_test').click(function() {
    ...
    data: jQuery('#theForm').serialize(),
    ...