为什么IE9(8)使用try / catch以不同方式处理XDR

时间:2015-02-26 18:06:05

标签: ajax internet-explorer internet-explorer-8 internet-explorer-9 cors

所以我想在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解决方案给了我:

enter image description here

if ('withCredentials' in request)

enter image description here

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

1 个答案:

答案 0 :(得分:0)

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