1

我正在开发一个 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 status0,虽然没有request.statusText显示。我究竟做错了什么?提前致谢 :) 。

4

1 回答 1

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.
于 2012-04-01T18:10:13.200 回答