cordova ios xmlhttprequest似乎缓存响应

时间:2014-05-16 21:58:59

标签: javascript ios caching cordova xmlhttprequest

我有一个使用XMLHTTPRequest打电话的cordova ios应用程序。情况是,我第一次使用正确的用户名/密码登录,应用程序按预期工作。注销后会执行一些操作,我明确尝试使用错误的用户名/密码登录。似乎它仍在登录我。我甚至已经通知了服务器的响应,它正在返回之前的响应。

我已经准备好了与我目前情况相似的其他线程,但是,我已添加了这样的内容:

"缓存控制:无缓存" "缓存控制:max-age = 0" " pragma:no-cache"

但都没有效果。任何信息都会有帮助。感谢。

1 个答案:

答案 0 :(得分: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对象。 baseUrlhttp(s)://mydomain.tdlapiUrl用于对API进行版本控制或细分,如果不需要,请将其设置为/,否则将其用作/myApiv1/

如果您需要BaiscAuth将} username: someuserpassword: plaintextpassword添加到方法ajaxSetup中的setupAjaxDefaults对象。

您的应用程序触发deviceready事件调用api.initialize();

然后使用:

进行未缓存的请求
api.ajaxGet('someEndpoint', { some: param, someother: data }, aSuccessCallbackFn, optionalFailureCallbackFn);