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 を使用して) もう少し深く掘り下げたところ、内部エラーは「要求したアクションは許可されていません」でした。(Google chromeを使用している場合、詳細なエラーメッセージは表示されませんでした)これはcsrf_protectionと関係があります(これをtrueに設定しました)。つまり、このモーダルを呼び出すときに、csrf トークン名とハッシュを渡す必要があります (つまり、$this->security->get_csrf_token_name(); を使用して) が、ブートストラップ js ソース コード data-remote を見てきました。 jQueryロード関数を呼び出すだけです:

.load(this.options.remote)

データを受け入れずに、csrf トークン名とハッシュを渡すにはどうすればよいでしょうか????

4

2 に答える 2

0

まず、正しい方向に向けてくれた @stormdrain に感謝します。その理由は次のとおりです。

私のjsファイルには、「POST」タイプのajaxsetup定義(私のページにはいくつかのajax呼び出しがあります)があります。すなわち:

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

そのため、モーダルが jquery load 関数を呼び出すと、型の値が取得され、「get」を使用する代わりに「post」が使用されるため、CSRF を渡さないとモーダルが機能しません。ajaxsetup の「type: POST」を削除しましたが、CSRF パラメーターを渡さなくても問題ありません。

于 2013-10-01T14:11:27.223 に答える
0

../index.php... または ../../index.php... を試してモーダル URL...

于 2013-10-01T12:34:28.747 に答える