Извлечение данных с сервера с использованием XMLHttpRequest (для приложения Phonegapp BlackBerry) - PullRequest
1 голос
/ 03 марта 2012

Я занимаюсь разработкой приложения 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 голосов
/ 01 апреля 2012

Решением было проверить приложение в 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.
...