PhoneGap应用程序不会连续两次查询服务器

PhoneGap app doesn't query the server two times in a row

本文关键字:两次 查询 查询服务 服务器 应用程序 连续 PhoneGap      更新时间:2023-09-26

情况如下:

我有一个PhoneGap应用程序和Tomcat服务器。应用程序通过$向服务器查询一些数据。ajax POST调用并显示。

我第一次尝试执行查询按一些按钮我在我的应用程序UI上一切顺利,发生的是,如果我第二次尝试同样的事情,服务器没有得到查询和应用程序显示相同的数据它做了最后一次。看起来它正在捕捉应用内浏览器中的数据…

任何想法如何使应用程序实际查询服务器每次?

非常感谢!

编辑:这是我的代码

PhoneGap代码:

function showDialog() {
    var sessionid = window.localStorage.getItem("sessionid");
    $.mobile.showPageLoadingMsg();
    $.ajax({
        type: "POST",
        url: "https://192.168.7.56:8443/Mobile_Signature/service/pdf-signature",
        data: { action : "get-txcertificates" , sessionid : sessionid },
        success: function(result) {
                    $.mobile.hidePageLoadingMsg();
                    CertificatesDialog.show(function() {}, function() {alert("some error");}, JSON.parse(result));
                 }
    });
}

下面是servlet代码,它接收POST查询并且只在第一次被调用:

if (request.getParameter("action").equals("get-txcertificates")) {
    System.out.println("Obtaining certificates");
String user = DataController.getInstance().getUserID(sessionid);
    String access_token = DataController.getInstance()
                .getTxAccessToken(sessionid);
try {
    System.out.println("getting certificates with user " + user
            + " and accesstoken: " + access_token);
    X509Certificate[] certs = ServiceFactory.getServiceWrapper(
            ServiceFactory.SW_SERVICE).getUserCertificates(user,
                    access_token);
    JSONArray certsArray = new JSONArray();
    for (X509Certificate c : certs) {
    System.out.println("dn: " + c.getSubjectDN().toString());
    certsArray.put(c.getSubjectDN().toString());
    }
    response.getWriter().print(certsArray);
    } catch (NoSuchMethodException | MessageNotAuthenticatedException e) {
    e.printStackTrace();
}

找到了一个虚拟的解决方案来避免在iOS 6中缓存POST请求:

生成一个随机数,并将其作为参数添加到请求中。像这样:

var randomnumber = Math.floor(Math.random()*1001);
$.ajax({
    type: "POST",
    url: "http://yoururl/yourservice",
    data: { foo : "bar" , nocaching : randomnumber },
    success: successCallback
});

通过添加randomnumber参数,每个POST请求对浏览器来说看起来都不一样,所以它不再缓存它。无论如何,服务器不读取它

希望对大家有所帮助