JQuery .ajax 304 Not Modified parseerror

时间:2016-02-02 22:19:06

标签: javascript jquery json ajax http-status-code-304

我有一个单页javascript webapp,我们从头开始(我知道我知道)

我们有一组中心的ajax默认值,其工作方式如下:

Model.defaultsLoader = function(message, config, callback, async, delay){
    if(typeof delay === "undefined"){
        delay = 3000;
    }
    var loader = new Loader(delay, message);
    defaults = {
        type: 'GET',
        beforeSend: function(jqXHR){
            var token = $("meta[name='csrf-token']").attr("content");
            jqXHR.setRequestHeader("X-CSRF-Token", token);
        },
        success: function(response){
            loader.stop();
            if(callback){
                callback(response);
            }
        },
        error: function(jqXHR, textStatus, errorThrown ){
            if (jqXHR.status === 401) {
                document.location = "/";
            }
            else if(!death && jqXHR.status !== 200) {
                loader.showError(textStatus + ": " + errorThrown);
                Support.bugReport(
                    account.email + ', ' +
                    message + ': ' +
                    textStatus + ': ' +
                    errorThrown);
            }
        },
        dataType: 'json',
        async: async
    };

    for(var param in config){
        defaults[param] = config[param];
    }

    return defaults;
};

我遇到的问题是,最近我们开始遇到来自后端的304 Not Modified响应的问题,最终出现在错误处理程序而不是成功处理程序中。原因是'parseerror'......无论出于什么原因,JQuery试图在304响应中解析响应体(我的服务器上的响应是“”也就是什么。)我知道空字符串不是有效的json,但我不知道不明白为什么Jquery试图解析空字符串而不是加载缓存的值...这在某些情况下会对我们的生产服务器造成相当麻烦的行为。

我已经为调试目的包含了打印输出的开放控制台的屏幕截图。你必须原谅它是展开的缩小代码。

dev console screenshot

编辑:调试器显示的响应代码为200,而chrome dev工具显示的响应代码为304,这似乎很奇怪。

0 个答案:

没有答案