原生XMLHttpRequest()成功发出CORS请求,但jQuery .ajax不成功?

时间:2015-11-04 18:27:10

标签: javascript jquery ajax cors

使用vanilla XMLHttpRequest()对象为我创建CORS请求成功,但不使用jQuery.get()函数。然而,$.get()建立在$.ajax()之上,它建立在浏览器的XMLHttpRequest()对象之上。

为什么我的jQuery .get()告诉我不允许跨源请求?

小提琴:https://jsfiddle.net/3pwhu05t/

的jQuery()

jQuery.get( {url: 'https://www.wikidata.org/wiki/Special:EntityData/Q4231.rdf'});
// or
jQuery.get( {url: 'https://www.wikidata.org/wiki/Special:EntityData/Q4231.rdf',
        crossDomain: true,
        xhrFields: {
            withCredentials: true
          },
    } );

XMLHttpRequest代码(取自this htlm5rocks.com example

// Create the XHR object.
function createCORSRequest(method, url) {
  var xhr = new XMLHttpRequest();
  if ("withCredentials" in xhr) {
    // XHR for Chrome/Firefox/Opera/Safari.
    xhr.open(method, url, true);
  } else if (typeof XDomainRequest != "undefined") {
    // XDomainRequest for IE.
    xhr = new XDomainRequest();
    xhr.open(method, url);
  } else {
    // CORS not supported.
    xhr = null;
  }
  return xhr;
}

// Make the actual CORS request.
function makeCorsRequest() {
  var url = 'https://www.wikidata.org/wiki/Special:EntityData/Q4231.rdf';

  var xhr = createCORSRequest('GET', url);
  if (!xhr) {
    alert('CORS not supported');
    return;
  }

  // Response handlers.
  xhr.onload = function() {
    var responseText = xhr.responseText;
    console.log(responseText);
  };

  xhr.onerror = function() {
    alert('Woops, there was an error making the request.');
  };

  xhr.send();
}


makeCorsRequest();

1 个答案:

答案 0 :(得分:1)

jQuery 3.0引入了一种使用jQuery.get的新方法,允许您传入设置对象。这就是为什么jsfiddle在边缘工作,而不是2.1.4,为什么在本地机器上它请求本地文件系统,从而给你一个cors错误。如果要使用jQuery.get({url: theurl})语法,则必须使用jQuery 3.x,否则应使用jQuery.get(theurl)