javascript - cordova ios xmlhttprequest 似乎缓存响应

标签 javascript ios caching cordova xmlhttprequest

我有一个 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对象。 baseUrlhttp(s)://mydomain.tdlapiUrl 用于版本控制或分段 API,如果不需要,请将其设置为 / 否则使用 /myApiv1/

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

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

然后要发出未缓存的请求,请使用:

api.ajaxGet('someEndpoint', { some: param, someother: data }, aSuccessCallbackFn, optionalFailureCallbackFn);

关于javascript - cordova ios xmlhttprequest 似乎缓存响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23705189/

相关文章:

ios - Facebook iOS 移动 Web JS SDK 错误

html - CSS 被缓存在某个地方,而不是本地,而不是在浏览器上?

c# - ASP.NET MVC + IIS 10 - 缓存控制始终私有(private)

java - Spring MVC - 应用程序级别的缓存

javascript - Dojo 1.8 显示数据的基本小部件

javascript - 如何使用 Babel 转译 JavaScript?

javascript - 实现 css 模式不起作用

javascript - 在 Vue JS 中,从 vue 实例内部的方法调用过滤器

ios - 在 Swift 中使用 C 库获取不安全指针

ios - Facebook 应用程序。 Iphone 应用商店 ID 无效