我有一个单页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试图解析空字符串而不是加载缓存的值...这在某些情况下会对我们的生产服务器造成相当麻烦的行为。
我已经为调试目的包含了打印输出的开放控制台的屏幕截图。你必须原谅它是展开的缩小代码。
编辑:调试器显示的响应代码为200,而chrome dev工具显示的响应代码为304,这似乎很奇怪。