CORS不起作用

时间:2014-04-03 10:35:24

标签: jsonp cors

我试图异步调用Yahoo的符号建议JSONP API,所以存在跨域问题,我已阅读this文档并尝试更改它的url,以下是我使用的代码

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;
            }


            function makeCorsRequest() {
                // All HTML5 Rocks properties support CORS.
      //          var url = 'http://updates.html5rocks.com';

               var url = 'http://autoc.finance.yahoo.com/autoc?query=google&callback=YAHOO.Finance.SymbolSuggest.ssCallback';
                var xhr = createCORSRequest('GET', url);
                if (!xhr) {
                    alert('CORS not supported');
                    return;
                }

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

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

                xhr.send();
            }

但问题仍未解决:

No 'Access-Control-Allow-Origin' header is present on the requested resource.

有谁知道为什么?另外,我将文档中的代码与常规的ajax代码进行了比较,它们几乎相同,CORS如何工作? 感谢

1 个答案:

答案 0 :(得分:1)

要使CORS正常工作,服务器需要设置Access-Control-Allow-Origin标头。如果您不控制服务器,并且服务器没有设置该标头,那么我担心您运气不好。

CORS取代JSONP作为加载跨域json内容的方式,但是使用JSONP服务器也需要实现它。

如果内容的所有者不希望您使用它,浏览器将拒绝它。

编辑:当然,您可以让服务器从原始服务器获取内容,并让浏览器从您自己的服务器获取内容,从而避免跨浏览器问题。更多的工作,但它不再是跨浏览器了。