我正在开发BlackBerry Phonegap应用程序。因此,我使用的是JavaScript。
从本地文件,我试图获取位于服务器中的一些数据(裸文本)。我正在尝试不同的浏览器(主要是Mozilla和Chrome)。我使用的代码如下:
try{
request = new XMLHttpRequest();
request.onreadystatechange = processResults;
request.open('GET', url, false);
request.send();
}catch(e){
alert('exception performing data request: ' + e.name + '; ' + e.message);
}
回调:
function processResults(){
if(request.readyState == 4){
if(request.status == 200){
document.getElementById('divResults').innerHTML = request.responseText;
}else{
alert("Error! Status" + request.status + " - " + request.statusText);
}
}
}
我遇到的问题是永远不会获取数据。该异常返回以下错误:
NS_ERROR_FAILURE; Component returned failure code: 0x80004005 (NS_ERROR_FAILURE)
我做了一些研究,这些问题最常见的原因是同源政策。但是,我肯定会在之前禁用它:
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
} catch (e) {
alert("UniversalBrowserRead failed");
}
Firebug只是指出错误位于request.send()
行,但没有提供进一步的信息。 xmlHTTP status
为0,但未显示request.statusText
。我究竟做错了什么?在此先感谢:)。
答案 0 :(得分:0)
解决方案是在Internet Explorer中测试应用程序,不管你信不信。在IE中,没有出现错误消息,一切都按预期工作。经过多次测试,这是适合我的代码。希望它对其他人有用:
// Create the XHR object.
// For non-IE browsers (Chrome, Mozilla, Opera, Safari, etc.).
if(XMLHttpRequest){
request = new XMLHttpRequest();
// For IE.
}else if(ActiveXObject){
try{
request = new ActiveXObject('Msxml2.XMLHTTP');
}catch(e){
request = new ActiveXObject('Microsoft.XMLHTTP');
}
}else{
alert('Could not create XMLHTTP request object');
}
// Request the data.
try{
request.onreadystatechange = function(){
if(request.readyState == 4 && request.status != 200){
console.log(request.responseText);
alert("Error! Status " + request.status + " - " + request.statusText);
}
};
request.open('GET', targetURL, false);
request.send();
}catch(e){
alert('Error while performing the request: ' + e.name + '; ' + e.message);
}
// Empty the content into a proper JavaScript variable.
var text = request.responseText;
var xmlText = eval("(" + text + ")");
// Just fetch the data you want from the xmlText object.