GET HTTPs请求在phonegap中无法正常工作

时间:2011-09-22 07:04:51

标签: javascript http cordova request couchdb

我在Android手机(在ANdroid 2.2上运行的三星Galaxy mini)上运行此应用程序。我正在使用couchdb作为我的数据库并将其托管在cloudant上。

在设备就绪后,应用程序将向https数据库服务器发出get请求,该服务器包含我需要在我的应用程序中显示的数据源。起初,它工作正常但是当我尝试发布并向我的https数据库服务器添加新数据,然后触发get请求方法时,从服务器返回的响应仍然与之前相同(新发布的数据不包括在内)即使我检查了我的数据库服务器,并看到它确实已保存)。然后我试图关闭并再次重新打开应用程序,然后将生成获取http请求的新实例,但仍然,响应仍然与第一个相同,并且不包含添加到数据库的新数据服务器。然后,我尝试重新安装我的应用程序,然后再次运行应用程序,奇怪的是,来自get请求的响应现在包含新数据..我不知道这是怎么回事,而且我对REST并不是很有经验api和javascript所以我可能会做一些明显错误的事情。这是我的get请求代码片段:

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 个答案:

答案 0 :(得分:2)

上周我遇到了类似设备缓存请求的问题。我通过向链接添加一个虚拟唯一参数来解决它,如下所示:

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();

}

答案 1 :(得分:0)

Paul Beusterien的解决方案为我提供了以下警告:

Android 4.0.4。手机不需要唯一的URL,但2.2.2上运行的代码相同!