我目前正在使用框架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);
});
这里是处理请求页面的codeigniter控制器:
class PostController extends CI_Controller {
public function __construct(){
parent::__construct();
}
public function addPostToProfile() {
echo 'It works!!!';
}
}
我已经使用放置在应用根目录中的新文件请求测试了该函数。然后它就像一个魅力。
看起来CodeIgniter控制器正在阻止POST请求或其他东西..
我发现它是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>
答案 0 :(得分:0)
检查您的site_url
或add_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(),
...