情况如下:
我有一个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));
}
});
}
这是接收POST查询的servlet代码,只在第一次调用时才会被调用:
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();
}
答案 0 :(得分: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
});
通过添加randomnumber参数,每个POST请求看起来与浏览器不同,因此它不再缓存它。无论服务器不读它。
希望这对某人有帮助。