跨浏览器访问时,使用XMLHttpRequest.Open时出现“权限被拒绝”的错误

4
我正在尝试访问XMLHTTPRequest.open方法,甚至包括了netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");,但仍然无法工作。
我正在使用JavaScript和HTML来访问Web服务。
任何帮助都将非常感激。
代码:

HTML代码示例已被省略。
这是调用Web服务的HTML代码。在页面加载时,会运行一个名为"GetDataFrmWS()"的JavaScript函数。它定义了两个全局变量:objHttp和objXmlDoc,并调用另一个名为"getDataFromWS()"的函数。

}

从英语翻译成中文:

function getDataFromWS() { if(window.ActiveXObject) { try { objHttp = new ActiveXObject('Msxml2.XMLHTTP');

    }
 catch (ex)
 {
  objHttp = new ActiveXObject('Microsoft.XMLHTTP');
 }

如果(window.XMLHttpRequest){ objHttp = new window.XMLHttpRequest(); netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); }
strEnvelope = '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' + '<soap:Body>' + ' <HelloWorld xmlns="http://tempuri.org/">' + ' <Dummy xsi:type="xsd:string">Hello</Dummy>'+ ' </HelloWorld>'+ '</soap:Body>' + '</soap:Envelope>' ;
var szUrl; szUrl = 'http://kamadhenu/Quoteme/GetCategories.asmx?op=HelloWorld'; objHttp.onreadystatechange = HandleResponse;

objHttp.open('POST', szUrl, true); objHttp.setRequestHeader('Content-Type', 'text/xml'); objHttp.setRequestHeader('SOAPAction','http://tempuri.org/HelloWorld'); objHttp.send(strEnvelope);

这段代码是使用 JavaScript 发送 SOAP 请求的示例。其中,'POST' 表示使用 POST 方法发送请求;szUrl 是目标 URL;'Content-Type' 和 'SOAPAction' 分别设置 HTTP 请求头中的 Content-Type 和 SOAPAction 属性;strEnvelope 是包含 SOAP 消息的 XML 字符串。

}

函数 HandleResponse() { 如果 (objHttp.readyState == 4) {

如果(window.ActiveXObject){ objXmlDoc = new ActiveXObject("Microsoft.XMLDOM"); objXmlDoc.async="false"; objXmlDoc.loadXML(objHttp.responseText); var nodeSelect = objXmlDoc.getElementsByTagName("Menu1").item(0); var Menu2=objXmlDoc.getElementsByTagName("Menu2").item(0); document.getElementById('DisplayData').innerHTML=nodeSelect.text; document.getElementById('Menu2').innerHTML=Menu2.text; } else { var Text=objHttp.responseText; var parser=new DOMParser(); objXmlDoc = parser.parseFromString(Text,'text/xml'); var Value=objXmlDoc.documentElement.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].nodeValue; var Menu2=objXmlDoc.documentElement.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[1].childNodes[0].nodeValue; var Menu3=objXmlDoc.documentElement.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[1].childNodes[1].nodeValue; document.getElementById('DisplayData').innerHTML=Value; document.getElementById('Menu2').innerHTML=Menu2; document.getElementById('Menu2').innerHTML+=Menu3; }

}

°

需要查看格式化的代码,使用四个空格缩进使其易读... - Tuminoid
我希望现在代码更易读。 - user42070
4个回答

2

XML HTTPRequest的浏览器无关代码

我使用以下代码创建XML对象。它已经被设计用来处理所有浏览器(尤其是IE和非IE)。

/* Function to create an XMLHTTP object for all browsers */
function getXMLHTTPObject(){
    var xmlHttp;
    try{
        // Firefox, Opera 8.0+, Safari
        xmlHttp=new XMLHttpRequest();
    } catch (e){
        // Internet Explorer
        try{
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }catch (e){
            try{
                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }catch (e){
                alert("Your browser does not support AJAX!");
                return false;
            }
        }
    }
    return xmlHttp;
}       
/* End Function */

注意,您提供的问题中的代码无法阅读,请进行格式化。


1

1
据我所知,为了获得各种浏览器的权限,XMLHTTP请求必须指向与HTML页面相同子域上的页面。
一个技巧是在同一服务器上创建另一个页面,使用服务器网络处理请求。
例如:
从您的HTML页面发出ajax请求到mydomain.com/externalrequest.php?url=www.google.com,该页面将连接(fsock/cURL等)到“url”并返回它。

1
如果你想使用XHR进行跨域请求,可以尝试使用JSONP方法。请查看JQuery文档了解详情。
该方法需要接受JSON响应,但可以实现跨域请求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接