Javascript重定向404错误

时间:2016-09-16 14:22:56

标签: javascript

有一个外部网站,其中包含一年中每一天的html文档,我正在尝试自动加载当前日期的文档。但是,每个文档的网址都不一致。其中一些以.html结尾,而另一些以.htm结尾,其中一些可能会在文件名后附加一个字母。

我想要做的是尝试加载网址,如果导致404错误,请尝试加载其他网址。

例如,我可能会window.location.replace(baseurl+'.htm'); 如果这导致404错误,请尝试window.location.replace(baseurl+'.html');,如果这导致404,请尝试别的。

如何确定服务器何时发送404错误并尝试加载新网址?

2 个答案:

答案 0 :(得分:2)

这是一个可以传递扩展名来尝试的函数,它会将第一个有效的URL返回给回调函数:

var request = new XMLHttpRequest();
var extensions = ['.html', '.htm'];
var count = 0;
var baseurl = 'http://blah.com/file';

function validUrl(baseurl, cb) {
  request.open('GET', baseurl + extensions[count], true);

  request.onreadystatechange = function() {
    if (request.readyState === 4) {
      if (request.status === 200) {
        cb(baseurl + extensions[count]);
      } else {
        count++;
        if (count === extensions.length) {
          cb(false);
        } else {
          validUrl(baseurl, cb);
        }
      }
    }
  };

  request.send();
}

// usage:

validUrl(baseurl, function(url) {
  if (url) {
    // use the valid url
  } else {
    console.log('no valid urls');
  }
});

答案 1 :(得分:1)

正如@Siguza所说,你可以坚持异步请求并验证它的状态。

我建议你创建一个调用AJAX的函数,并处理它的状态,如果它是否可以作为布尔值返回给你。类似的东西:

// I'm  building an function to validate the URL
function checkValidURL(url) {
  var xmlhttp;
  if (window.XMLHttpRequest) {
    xmlhttp = new XMLHttpRequest();
  } else {
    // code for older browsers
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }

  // Callback
  xmlhttp.onreadystatechange = function() {
    if (this.status == 200) {
      return true; // OK
    } else { // or -> } else if (this.status == 404) {
      return false; // Ops, something happen..
    }
  };
  // AJAX configuration
  xmlhttp.open("GET", url, false); // <- "false" for a synchronous request
  xmlhttp.send();
}

简单的使用示例:

if (!checkValidURL("http://www.my_url")) {
    console.log("invalid URL"); 

    // Call or check other URL
} else {
    // It's OK, proceed with the business rules
}

函数可以通过设置异步&#34; false&#34;等待:Is there any way to wait for AJAX response and halt execution?

来等待AJAX​​请求