GET HTTP-запрос не работает должным образом в PhoneGap - PullRequest
1 голос
/ 22 сентября 2011

Я запускаю это приложение на телефоне Android (Samsung Galaxy mini работает на ANdroid 2.2). Я использую couchdb для своей базы данных и размещаю ее на cloudant.

Когда устройство готово, приложение отправит запрос на получение на сервер https db, который содержит потоки данных, которые мне нужно отобразить в моем приложении. Сначала все работало нормально, но когда я пытаюсь опубликовать и добавить новые данные на свой сервер базы данных https, а затем активировать метод запроса get, ответ от сервера остается таким же, как и раньше (недавно опубликованные данные не были включены хотя я проверил свой сервер БД и увидел, что он действительно был сохранен). Затем я попытался снова закрыть и снова открыть приложение, которое затем создаст новый экземпляр запроса get http, но ответ по-прежнему будет таким же, как самый первый, и не содержит новых данных, добавленных в базу данных. сервер. Затем я попытался переустановить свое приложение, затем снова запустить приложение, и, как ни странно, ответ на запрос get теперь содержит новые данные ... Я не знаю, как это происходит, и я не очень разбираюсь в REST API и JavaScript, поэтому я могу делать что-то явно неправильно. Вот фрагмент моего кода для запроса на получение:

var getFeedsClient;

document.addEventListener ("deviceready", onDeviceReady, false);

function onDeviceReady() {

    if (window.XMLHttpRequest) {
        getFeedsClient=new XMLHttpRequest(); 
        }
    else {
        getFeedsClient=new ActiveXObject("Microsoft.XMLHTTP");
        }

    try{ 
        getFeedsRequest();
    } catch(e)
    {
    alert("Error on device ready: "+e);
    } 

}//on Device Ready




function getFeedsRequest() {
        getFeedsClient.onreadystatechange = getFeedsFunction;
         getFeedsClient.open("GET","https://<username>.cloudant.com/te/_design/requestfeed/_view/all",true);
        getFeedsClient.send();
}

function getFeedsFunction() {
    alert(" readystate: "+getFeedsClient.readyState+", status: "+getFeedsClient.status);
    if(getFeedsClient.readyState == 4 &&  getFeedsClient.status == 200 ) {
        var data = JSON.parse(getFeedsClient.responseText);
            console.log("RESPONSE FROM COUCHDB "+getFeedsClient.responseText);
            console.log("JSON data "+data);

        //at first the total rows is 2 but when a new data was added, the total rows should be three, but that was not the case
        alert("rows: "+data.total_rows);

    }
}  

Ответы [ 2 ]

2 голосов
/ 22 сентября 2011

На прошлой неделе я столкнулся с похожей проблемой запросов кеширования устройства.Я решил это, добавив фиктивный уникальный параметр к ссылке, как показано ниже:

function getFeedsRequest() {
    getFeedsClient.onreadystatechange = getFeedsFunction; 
    var link = "https://<username>.cloudant.com/te/_design/requestfeed/_view/all";
    var unique = (new Date).getTime();
     getFeedsClient.open("GET",link + '?' + unique,true);
    getFeedsClient.send();

}

0 голосов
/ 25 сентября 2012

Приведенное ниже решение Пола Бустериена сработало для меня со следующим предостережением:

Android 4.0.4.телефон не нуждался в уникальном URL, но тот же код, работающий на 2.2.2, был необходим!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...