用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3730|回复: 9
收起左侧

一个ajax请求的问题,请高手帮忙看看!

[复制链接]
发表于 2012-3-19 15:57:09 | 显示全部楼层 |阅读模式
本帖最后由 小铅笔 于 2012-3-19 18:05 编辑

一个很奇怪的问题
这个是控制器的代码,非常简单
PHP复制代码
<?php
 class int extends CI_Controller
 {
    function __construct()
    {
        parent::__construct();
    }
 
    public function index()
    {
        $data['title']=$_POST['user'];
        echo $this->load->view('pages/loadajax',$data,TRUE);
 
    }
 
 }
复制代码



这个是JQUERY的代码
JS复制代码
$(document).ready(function(){
    $('#load').click(function(){
        $.post('index.php/int',{‘user’:'TEST WORD'},function(data){$(data).insertAfter('#load');})
    })
})
复制代码



那么现在有一个问题很怪。就是用$.post的时候如果加上输出参数{‘user’:'TEST WORD'}。就不能正确显示。如果把输入参数去掉。然后在控制器里面把$data['title']=$_POST['user'];改为一个字符串。比如$data['title']='TEST WORD';那么就可以正常的显示。
请问是我哪里代码不正确吗?




发表于 2012-3-19 17:48:24 | 显示全部楼层
看起来没问题,你用 firebug 看看请求是如何发送的。
 楼主| 发表于 2012-3-19 18:17:25 | 显示全部楼层
用firebug提示这个错误。不知道原因出在哪了

500 Internal Server Error


The action you have requested is not allowed.
发表于 2012-3-20 08:51:48 | 显示全部楼层
好像是csrf开启了?
 楼主| 发表于 2012-3-20 10:03:44 | 显示全部楼层
谢谢。的确是CSRF的问题。我全局开启了。下面这篇文章讲了如何在全局开启CSRF情况下设置 AJAX

http://blog.hsin.tw/2011/codeigniter-csrf-protection-form-ajax/
发表于 2012-3-20 10:46:27 | 显示全部楼层
小铅笔 发表于 2012-3-20 10:03
谢谢。的确是CSRF的问题。我全局开启了。下面这篇文章讲了如何在全局开启CSRF情况下设置 AJAX

http://blog ...

你用 helper form_open创建form的话,会自动添加一行token行
发表于 2012-3-20 13:18:12 | 显示全部楼层
本帖最后由 yuzhigang5460 于 2012-3-20 13:29 编辑
小铅笔 发表于 2012-3-20 10:03
谢谢。的确是CSRF的问题。我全局开启了。下面这篇文章讲了如何在全局开启CSRF情况下设置 AJAX

http://blog ...

我关闭了CSRF,问题仍然不能重现。
我post过去的数据能正常显示。

——————
理解错误,原来是开启了才会出现问题。
发表于 2012-3-20 13:59:37 | 显示全部楼层
$.post('index.php/int'  这建议写绝对路径
$.post('<?php echo base_url();?>index.php/int'
或者<?php echo site_url('int');?>

csrf 开启也没事{‘user’:'TEST WORD',‘csrf名称:’$('#csrfid').val()}
发表于 2012-3-20 19:17:25 | 显示全部楼层
zhengfeity 发表于 2012-3-20 13:59
$.post('index.php/int'  这建议写绝对路径
$.post('index.php/int'
或者

我测试过了,开启以后的确会出现楼主那样的情况,即便是使用绝对路径。
发表于 2012-3-22 13:41:05 | 显示全部楼层
  $("#sheng").live("change",function(){
            $.post('http://xxxx/index.php/user/tender/region.html',{csrf_test_name("[name='csrf_test_name']").val(),sheng(this).val()},
                  function(data)
                {
                        $('#shi').html('aaaaa');
                });
          
  });

本版积分规则