我有一个引导 (2.3.2( 模式定义为:
<div id="myModal" class="modal hide fade">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3>Modal header</h3>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<a href="#" class="btn">Close</a>
<a href="#" class="btn btn-primary">Save changes</a>
</div>
</div>
我还有一个这样的按钮:
<button type="button" data-toggle="modal" data-remote="index.php/mycontroller/methodname" data-target="#myModal">Launch modal</button>
控制器中的方法:
public function methodname() {
$this->load->view('modalbody');
}
如果我直接使用浏览器访问:localhost/myproject/index.php/mycontroller/methodname,我可以毫无问题地获取html,但是如果我单击该按钮,则会出现500内部服务器错误。为什么以及如何解决这个问题?
编辑:加载模态时,我没有看到我的 html 被注入到"模态体"中。我也深入挖掘了一点(通过使用火狐+火虫(,内部错误是"您请求的操作是不允许的"。(使用谷歌浏览器时,它没有显示任何详细的错误消息(这与csrf_protection有关(我已将其设置为 true(。所以这意味着在调用这个模态时,我必须传递 csrf 令牌名称和哈希(即通过使用 $this->security->get_csrf_token_name((;),但我查看了引导 js 源代码,data-remote 只是调用 jQuery 加载函数:
.load(this.options.remote)
不接受任何数据,那么我将如何传递CSRF令牌名称和哈希????
试试../索引.php...或。。/../索引.php...对于模态网址...
首先感谢
了
@stormdrain为我指出正确的方向,这就是原因。
在我的js文件中,我有ajaxsetup定义(我的页面有几个ajax调用(,类型为:"POST"。
$.ajaxSetup({
url: 'index.php/page',
type: 'POST',
dataType: 'JSON'
});
因此,当模态调用jquery加载函数时,它采用类型值,而不是使用"get",而是使用"post",这就是为什么我的模态在不传递CSRF的情况下不起作用的原因。我已经在 ajaxsetup 中删除了"类型:POST",现在无需传递任何 CSRF 参数就可以