0

我有一个引导程序(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 internal server error 。为什么以及如何解决这个问题?

编辑:当模态加载时,我没有看到我的 html 被注入到“modal-body”中。此外,我深入挖掘(通过使用 firefox + firebug),内部错误是“不允许您请求的操作。” (当使用谷歌浏览器时,它没有显示任何详细的错误消息)这与 csrf_protection 有关(我已将其设置为 true)。所以这意味着在调用此模式时,我必须传递 csrf 令牌名称和哈希(即通过使用 $this->security->get_csrf_token_name();),但我查看了引导 js 源代码 data-remote只是调用 jQuery 加载函数:

.load(this.options.remote)

不接受任何数据,那么我将如何传递 csrf 令牌名称和哈希????

4

2 回答 2

0

first of all thanks @stormdrain for pointing me to the right direction, here is why.

in my js file, I have the ajaxsetup definition (my pages has several ajax calls) with type: 'POST'. ie:

$.ajaxSetup({
    url: 'index.php/page',
            type: 'POST',
            dataType: 'JSON'
    });

So when the modal calls the jquery load function, it takes the type value, and instead of using "get" it uses "post" so that's why my modal doesn't work without passing the CSRF. I have removed the 'type: POST' in ajaxsetup and now it's fine without passing any CSRF parameters

于 2013-10-01T14:11:27.223 回答
0

尝试 ../index.php... 或 ../../index.php... 获取模态网址...

于 2013-10-01T12:34:28.747 回答