无法使bootstrap模态+ codeigniter一起工作

时间:2013-09-30 19:20:53

标签: php codeigniter twitter-bootstrap codeigniter-2

我有一个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">&times;</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令牌名称和哈希????

2 个答案:

答案 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参数