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

问题描述:

我在Android手机(运行在ANdroid 2.2上的Samsung Galaxy mini)中运行此应用程序。我为我的数据库使用了couchdb,并将它托管在cloudant上。GET HTTPs请求在电话中无法正常工作

在设备准备就绪后,应用程序将向https数据库服务器发出获取请求,其中包含需要在我的应用中显示的数据提要。起初,它工作正常,但当我尝试发布并向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); 

    } 
} 

上周遇到了类似的问题,设备缓存请求。我解决它加上空唯一参数的链接如下图所示:下面

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

}

保罗Beusterien的解决方案为我用下面的警告:

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