jQuery ajax可以工作,但不是本机JS ajax

时间:2017-10-10 11:05:38

标签: javascript jquery ruby ajax ruby-on-rails-4

我有以下代码:

控制器

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 - ;我已经针对这两种类型的请求进行了比较,请求响应标头。但是,我发现没有任何区别。

1 个答案:

答案 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();