使用JavaScript在没有AJAX的情况下执行GET请求

时间:2010-12-20 13:38:46

标签: javascript

出于好奇,我想知道最好的(最简单的,最快的,最短的,等等;选择)方式在JavaScript中执行GET请求而不使用AJAX或任何外部库。

它必须跨浏览器工作,不允许以可视方式扭曲托管网页或以任何方式影响其功能。

我不关心请求中的标头,只关注url-part。我也不关心请求的结果。我只是希望服务器在收到此请求时做一些副作用,所以解雇它就是最重要的。如果您的解决方案要求服务器特别返回某些内容,那也没关系。

我会将自己的建议作为一个可能的答案发布,但如果有人能找到更好的方法,我会很高兴!

3 个答案:

答案 0 :(得分:8)

您是否尝试过使用Image对象?类似的东西:

var req = new Image();
req.onload = function() {
    // Probably not required if you're only interested in
    // making the request and don't need a callback function
}
req.src = 'http://example.com/foo/bar';

答案 1 :(得分:1)

function GET(url) {
  var head = document.getElementsByTagName('head')[0];
  var n = document.createElement('script');
  n.src = url;
  n.type = 'text/javascript';
  n.onload = function() { // this is not really mandatory, but removes the tag when finished.
    head.removeChild(n);
  };
  head.appendChild(n);
}

答案 2 :(得分:1)

我会使用Pekka的想法并使用隐藏的iframe,其优点是不会进行进一步的解析:对于图像,浏览器会尝试将结果解析为图像,以便动态创建script标记浏览器将尝试将结果解析为JavaScript代码.. iframe是“命中并运行”,浏览器不关心那里有什么。

稍微更改自己的解决方案:

function GET(url) {
    var oFrame = document.getElementById("MyAjaxFrame");
    if (!oFrame) {
        oFrame = document.createElement("iframe");
        oFrame.style.display = "none";
        oFrame.id = "MyAjaxFrame";
        document.body.appendChild(oFrame);
    }
    oFrame.src = url;
}