为什么IE9用try / catch区别对待XDR

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么IE9用try / catch区别对待XDR相关的知识,希望对你有一定的参考价值。

所以我想在IE8,9中进行CORS,所以我必须使用XDomainRequest。所以我创建了:

function post(url, data) {
  var request = new XMLHttpRequest();
  try {
    request.open('POST', url, true);
    request.setRequestHeader('Content-Type', 'text/plain');
  } catch (err) {
    if (err.message.indexOf('Access is denied') > -1) {
      request = new XDomainRequest();
      request.open('POST', url);
    } else {
      throw err;
    }
  }
  request.send(JSON.stringify(data));
}

哪个工作正常。然后我遇到了this article。它建议这样:

function post(url, data) {
  var request = new XMLHttpRequest();
  if ('withCredentials' in request) {
    request.open('POST', url, true);
    request.setRequestHeader('Content-Type', 'text/plain');
  } else if (typeof XDomainRequest !== 'undefined') {
    console.log('here') // 'here' in IE8,9
    request = new XDomainRequest();
    request.open('POST', url);
  } else {
    throw new Error('XHR cannot handle CORS and XDR is not available');
  }
  request.send(JSON.stringify(data));
}

也应该没事。但是,当我查看网络的标头时,try/catch解决方案给了我:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9YWG9zVC5wbmcifQ==” alt =“在此处输入图像描述”>

[if ('withCredentials' in request)期间:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS90U0xkcy5wbmcifQ==” alt =“在此处输入图像描述”>

他们有不同的Content-Type: text/plain!有人知道为什么吗?

答案

else if (typeof XDomainRequest !== 'undefined')代码块中,未设置内容类型,由于您正在使用IE8 / 9,因此将执行此块。

以上是关于为什么IE9用try / catch区别对待XDR的主要内容,如果未能解决你的问题,请参考以下文章

什么时候用try..catch,什么时候用throw和throws

try/catch 和 MFC TRY/CATCH 有啥区别?

javascript 多层嵌套try catch问题

JS中Try...Catch和onerror有啥区别?

try-catch和throw,throws的区别和联系

try-catch和throw,throws的区别