使用XMLHttpRequest从服务器获取数据(适用于Phonegapp BlackBerry App)

时间:2012-03-02 22:34:38

标签: javascript xmlhttprequest readystate

我正在开发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。我究竟做错了什么?在此先感谢:)。

1 个答案:

答案 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.