我有以下代码:
控制器
def some_method
respond_to do |format|
format.js { render js: "alert();" }
end
end
JS
执行alert();
jQuery.ajax({
url: url
});
这不会执行alert();
var xhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
xhttp.open("GET", url, true);
xhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xhttp.send();
jQuery与普通JavaScript有什么不同?
注意:
1>这两个请求都会触发AJAX。但是,只有jQuery请求执行JS代码,而不是本机JS AJAX。
2 - ;我已经针对这两种类型的请求进行了比较,请求和响应标头。但是,我发现没有任何区别。
答案 0 :(得分:0)
好的,我找到了答案。我挖掘了jQuery.ajax
代码,发现jQuery.ajax
还在其评估响应的代码中执行完成。因此,在本机JS中,我们可以评估响应,例如:
var xhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
xhttp.open("GET", url, true);
xhttp.onreadystatechange = function() {
if (xhttp.readyState > 3 && xhttp.status == 200) {
eval(xhttp.responseText); // This line does the trick
}
};
xhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xhttp.send();