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,我在 index 操作中有以下代码:

    respond_to 做 |格式| format.js 结束

  3. 这似乎正确地调用了 index.js.erb,我有:

    警报(“嗨”);

  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 回答