【发布时间】:2017-01-11 04:55:24
【问题描述】:
我试图按照下面提到的here 模板,从客户端(浏览器)用 JavaScript 编写跨域请求(例如,Google Finance resource):
function createCORSRequest(method, url) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined") {
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
// Otherwise, CORS is not supported by the browser.
xhr = null;
}
return xhr;
}
var url = 'http://finance.google.com/finance/info?client=ig&q=NASDAQ:GOOGL';
var xhr = createCORSRequest('GET', url);
if (!xhr) {
throw new Error('CORS not supported');
}
// Response handlers.
xhr.onload = function() {
var text = xhr.responseText;
var jsonReturend = JSON.parse(text);
console.log(jsonReturend)
};
xhr.onerror = function() {
alert('Woops, there was an error making the request.');
};
xhr.send();
但这不起作用,因为(我认为)“finance.google.com”在其响应标头中不包含Access-Control-Allow-Origin:,这是可以理解的。但是,我在 StackOverflow 帖子 here 上尝试了另一种建议的方法来使用 JSONP,如下所示:
$.ajax({
url: 'http://finance.google.com/finance/info?client=ig&q=NASDAQ:GOOGL',
jsonp: "callback",
dataType: "jsonp",
data: {},
// Work with the response
success: function( response ) {
console.log( response ); // server response
}
});
并且它有效(也就是说,我得到了预期的 JSON)!作为 Web 开发和一般 JS 的新手,我不确定为什么通过 jQuery 的 JSONP 调用 AJAX 是有效的,而在纯 JavaScript 中却失败了。我的问题是:
- JSONP 有什么不同的做法来使事情正常进行?或者仅仅是 因为“finance.google.com”允许 JSONP 类型的请求(但是 不是 CORS 类型的请求)?
- 是否可以通过严格使用 JavaScript 使其工作?如果是这样的话, 我怎样才能做到这一点?
谢谢大家的回答!
【问题讨论】:
标签: javascript jquery cors cross-domain jsonp