2

状況は次のとおりです。

PhoneGap アプリと Tomcat サーバーがあります。アプリは $.ajax POST 呼び出しを介してサーバーにいくつかのデータを照会し、それを表示します。

アプリの UI にあるボタンを押してクエリを初めて実行しようとすると、すべてうまくいきますが、同じことを 2 回目に試みると、サーバーはクエリを取得せず、アプリは前回と同じデータ。アプリ内ブラウザでデータをキャッチしているようです...

アプリが実際に毎回サーバーにクエリを実行する方法はありますか?

どうもありがとうございました!

編集:ここに私が持っているコードがあります

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

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

1 に答える 1

2

iOS 6 で POST リクエストのキャッシュを回避するためのダミーの解決策を見つけました。

乱数を生成し、それをパラメータとしてリクエストに追加します。このようなもの:

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

乱数パラメーターを追加することにより、すべての POST 要求がブラウザーに対して異なるように見えるため、キャッシュされなくなります。サーバーがそれを読み取らなくても。

これが誰かに役立つことを願っています。

于 2013-01-21T11:20:04.410 に答える