我有一个相当简单的演示应用程序来学习AJAX / jQuery。
在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'
});
}
这正确地调用了home / index,其中我在索引操作中有以下代码:
respond_to do | format | format.js 端
这似乎正确地调用了index.js.erb,我有:
警报( “HI”);
问题是警报没有显示出来!我可以在FireBug的控制台中看到我在XHR响应中正确地“警告(”hi“),但是警报没有执行!
任何帮助?
答案 0 :(得分: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的内容,则可能会让自己面临一个讨厌的脚本注入漏洞。