【问题标题】:How to continue ajax remaining requests if file not found?如果找不到文件,如何继续 ajax 剩余请求?
【发布时间】:2015-08-26 23:50:34
【问题描述】:

我正在尝试编写一个函数,该函数采用attribute-data 标记的所有 css/js 文件,并在服务器端修改任何脚本时刷新。我的initial attempt 涉及 php 和 jquery/javascript。这个新尝试仅基于 javascript/jquery!

我的问题是,在将 ajax 请求链接到这些文件时(对于修改日期),如果找不到文件,所有 ajax 请求都会停止。例如,如果我将(现有)style.css 重命名为(不存在)style_.css,所有链接的 ajax 请求都会中止,并且代码不会继续。

var file_url = [url1, url1, url3, url4, url5];

function getLatestModificationDate(file_url){
    $.when.apply($, file_url.map(function(url) {
        return $.ajax({ type: 'HEAD', url: url, beforeSend: function(jqXHR, settings) { jqXHR.url = settings.url; } });

    })).done(function() {
        var results = [], lastModified, file_jqXHR; 
        //each argument passed to this callback for ajax, is of this form [data, statusText, jqXHR]
        for (var i = 0; i < arguments.length; i++) {
            var obj= {};
            file_jqXHR = arguments[i][2]; //jqXHR
            lastModified = file_jqXHR.getResponseHeader('Last-Modified');
            obj['file'] = file_jqXHR.url;
            obj['modDate'] = lastModified;

            fileArray.push(obj); 
        }
        mainFunction(fileArray); //the main function, not in scope for this question.
    });
  }

我尝试在 beforeSend 之后在 ajax 中添加 error 选项,这不允许继续剩余的 ajax 请求。不知道return ajax apply(.., ..) 可以返回 false 以跳过对 404 的当前请求,因为我不知道如何跳过或返回 false 的 ajax?有什么快速的方法来检查文件是否存在?所以我只将现有文件添加到传递给function getLatestModificationDate(file_url){...} 的file_url 数组中

编辑:这是 Chrome 控制台的屏幕截图。

编辑:

我发现this question's answer 使用新的延迟来完成 ajax ......有人可以提供有关如何将该代码用于我的问题的任何简化吗?谢谢!

var myDeferred = $.Deferred();
var origDeferred = $.ajax(...);
// if request is ok, i resolve my deferred
origDeferred.done(function() {
  myDeferred.resolve.apply(this, arguments);
});
// if request failed, i also resolve my deferred
origDeferred.fail(function() {
  myDeferred.resolve.apply(this, arguments);
});

【问题讨论】:

  • 您能找到解决方案吗?我目前也被困在这里!谢谢!

标签: javascript jquery ajax http-status-code-404 status


【解决方案1】:

您可以使用 Try-Catch 块:

for (var i = 0; i < arguments.length; i++) {
    try{
            var obj= {};
            file_jqXHR = arguments[i][2]; //jqXHR
            lastModified = file_jqXHR.getResponseHeader('Last-Modified');
            obj['file'] = file_jqXHR.url;
            obj['modDate'] = lastModified;

            fileArray.push(obj); 
    }catch(e){}
}

【讨论】:

  • 不,这不能解决它...我已经用控制台中的错误图像更新了我的问题...
  • 嗨! Siamak ..我发现this question's answer 使用新的延迟来完成ajax ...您能否提供有关如何将该代码用于我的问题的任何简化?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
  • 2021-10-26
  • 2019-04-12
  • 1970-01-01
  • 2011-07-21
  • 2021-10-19
相关资源
最近更新 更多