2

我写了一些代码来获取 html 源代码,但它只能在 IE8 上工作,但不能在 mozila 和 chrome 上工作,有什么问题,请给我建议。我的代码

<script>

        function processStateChange() {
            statusDiv = document.getElementById("stats");
            if (req.readyState == 0) { statusDiv.innerHTML = "UNINITIALIZED"; }
            if (req.readyState == 1) { statusDiv.innerHTML = "LOADING"; }
            if (req.readyState == 2) { statusDiv.innerHTML = "LOADED"; }
            if (req.readyState == 3) { statusDiv.innerHTML = "INTERACTIVE"; }
            if (req.readyState == 4) {
                statusDiv.innerHTML = "COMPLETE";
                statusDiv.innerHTML = req.responseText;
            }
        }
        function GetXmlHttpObject() {
            if (window.XMLHttpRequest) {  // code for IE7+, Firefox, Chrome, Opera, Safari
                return new XMLHttpRequest();
            } if (window.ActiveXObject) {  // code for IE6, IE5 
                return new ActiveXObject("Microsoft.XMLHTTP");
            } return null;
        }
        //req = new XMLHttpRequest("Msxml2.XMLHTTP");     
        req = GetXmlHttpObject();
        debugger;
        if (req) {
            req.onreadystatechange = processStateChange;
            req.open("GET", "http://whatismyipaddress.com/", true);            
            req.send();
        }

    </script>

我检查了调试代码 IE 完全在循环中工作(req.readystate==4 最终得到响应文本)但 mozila 或 chrome 只是在工作循环(req.readystate==2 在中止循环后),什么是问题,请给我一些建议,使用jquery或java脚本来解决问题

谢谢你

4

1 回答 1

4

由于同源策略限制,您不能发送跨域 AJAX 调用。这在 IE 中起作用的原因可能是您正在使用一些旧的恐龙版本的 IE,它有一些错误并允许这样的 AJAX 请求。但是没有现代浏览器会允许你这样做。

您只能向包含发送 AJAX 请求的 javascript 代码的页面所在的域发送 AJAX 请求。

根据您对远程域的控制级别,有一些解决方法。在您的情况下,我猜您无法控制http://whatismyipaddress.com/. 因此,您唯一的选择是在您的域上编写一个服务器端脚本,作为您的域和远程域之间的桥梁,然后将 AJAX 请求发送到您的脚本:

req.open("GET", "/myscript", true); 
于 2012-08-20T12:25:24.397 回答