0

私はAJAX/jQueryを学ぶためのかなり単純なデモアプリを持っています。

  1. Assets / javascripts / runner.jsには、次のコードがあります。

    $(document).ready(function() {
        $.ajaxSettings.accepts.html = $.ajaxSettings.accepts.script;
    
        $.ajax({
            type: "POST",
        url: "http://localhost:3000/home/index",
            data: { name: "John", age: "35" },
            dataType: 'html'
        });
    }
    
  2. これは正しくhome/indexを呼び出します。ここで、インデックスアクションに次のコードがあります。

    response_todo|フォーマット| format.js終了

  3. これは、index.js.erbを正しく呼び出しているようです。

    alert( "hi");

  4. 問題は、アラートが表示されないことです。FireBugのコンソールで、XHR応答で「alert( "hi")」が正しく取得されていることがわかりますが、アラートは実行されません。

何か助けはありますか?

4

1 に答える 1

1

実際には、ajax 呼び出しの結果を処理していません。返された JavaScript がブラウザによって評価されることはありません。次のようになります。

$(document).ready(function() {
    $.ajaxSettings.accepts.html = $.ajaxSettings.accepts.script;

    $.ajax({
        type: "POST",
        url: "http://localhost:3000/home/index",
        data: { name: "John", age: "35" },
        dataType: 'html',
        success: function(data) {
            eval(data);  // where data is the javascript generated by home#index
        }
    });
}

この返された JavaScript の内容を誰かが制御できる場合、厄介なスクリプト インジェクションの脆弱性にさらされる可能性があることに注意してください。

于 2012-10-09T04:31:01.903 に答える