[英]cordova ios xmlhttprequest seems to cache response
我有一个cordova ios应用程序,该应用程序使用XMLHTTPRequest进行呼叫。 情况是,我第一次使用正确的用户名/密码登录,应用程序按预期工作。 在注销后执行一些操作时,我明确尝试使用错误的用户名/密码登录。 似乎它仍在登录。我什至警告了服务器的响应,它正在返回上一个响应。
我已经准备了与当前情况类似的其他线程,但是,我添加了以下几行:
“缓存控制:无缓存”“缓存控制:最大年龄= 0”“编译指示:无缓存”
但是没有一个有效。 任何信息都会有帮助。 谢谢。
这是一个已经使用了很多次的解决方案,尽管它依赖于jQuery:
var api = {
connection: {
baseUrl: '',
apiUrl: ''
},
initialize: function() {
api.setupAjaxDefaults();
},
setupAjaxDefaults: function() {
var headers = {
'Accept': "application/json; encoding='utf-8'",
'Content-Type': "application/json; encoding='utf-8'"
};
$.ajaxSetup({
headers: headers,
dataType: 'json',
crossDomain: true
});
},
ajaxPost: function(methodName, data, successCallback, errorCallback) {
$.ajax({
url: api.connection.baseUrl + api.connection.apiUrl + methodName,
data: data,
type: 'POST',
success: function(result, status, xhr) {
if ($.isFunction(successCallback)) {
successCallback(result);
}
},
error: function(jqXHR, textStatus, errorThrown) {
if ($.isFunction(errorCallback)) {
errorCallback();
}
else {
api.defaultErrorCallback(textStatus);
}
}
});
},
ajaxGet: function(methodName, data, successCallback, errorCallback) {
$.ajax({
url: api.connection.baseUrl + api.connection.apiUrl + methodName,
data: data,
cache: false,
type: 'GET',
success: function(result, status, xhr) {
if ($.isFunction(successCallback)) {
successCallback(result);
}
},
error: function(jqXHR, textStatus, errorThrown) {
if ($.isFunction(errorCallback)) {
errorCallback();
}
else {
api.defaultErrorCallback(textStatus);
}
}
});
},
ajaxGetCached: function(methodName, data, successCallback, errorCallback) {
$.ajax({
url: api.connection.baseUrl + api.connection.apiUrl + methodName,
data: data,
type: 'GET',
success: function(result, status, xhr) {
if ($.isFunction(successCallback)) {
successCallback(result);
}
},
error: function(jqXHR, textStatus, errorThrown) {
if ($.isFunction(errorCallback)) {
errorCallback();
}
else {
api.defaultErrorCallback(textStatus);
}
}
});
},
defaultErrorCallback: function(errorMsg) {
//alert('an api error occurred: ' + errorMsg);
}
};
首先填充connection
对象。 baseUrl
是http(s)://mydomain.tdl
而apiUrl
用于版本化或分段API,如果不需要,请将其设置为/
否则用作/myApiv1/
。
如果需要BaiscAuth
,请在ajaxSetup
方法setupAjaxDefaults
username: someuser
和password: plaintextpassword
到ajaxSetup
对象。
应用程序触发deviceready
事件后,请调用api.initialize();
然后要使用未缓存的请求:
api.ajaxGet('someEndpoint', { some: param, someother: data }, aSuccessCallbackFn, optionalFailureCallbackFn);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.