我有一个bootstrap(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被注入'modal-body'。我也挖了一点(通过使用firefox + firebug)并且内部错误是'你要求的动作是不允许的'。 (当使用谷歌浏览器时,它没有显示任何详细的错误信息)与csrf_protection有关(我已将此设置为true)。所以这意味着在调用这个模态时,我必须传递csrf令牌名称和哈希(即使用$ this-&gt; security-&gt; get_csrf_token_name();),但我已经查看了bootstrap js源代码,数据-remote只是调用jQuery加载函数:
.load(this.options.remote)
没有接受任何数据,那么我将如何传递csrf令牌名称和哈希????
答案 0 :(得分:0)
尝试../ index.php ...或../../ index.php ... for modal url ...
答案 1 :(得分:0)
首先感谢@stormdrain指出我正确的方向,这就是原因。
在我的js文件中,我有ajaxsetup定义(我的页面有几个ajax调用),类型为:&#39; POST&#39;。即:
$.ajaxSetup({
url: 'index.php/page',
type: 'POST',
dataType: 'JSON'
});
因此,当模态调用jquery加载函数时,它采用类型值,而不是使用&#34; get&#34;它使用&#34; post&#34;这就是为什么我的模态在没有通过CSRF的情况下无法工作的原因。我删除了&#39;类型:POST&#39;在ajaxsetup中,现在它很好,没有传递任何CSRF参数