nodejs jsonp - Access-Control-Allow-Origin 错误

nodejs jsonp - Access-Control-Allow-Origin Error

我很确定 JSONP 意味着没有跨域限制。我正在尝试使用 node 和 express 制作 JSONP 服务。这是简单的代码:

self.routes['/portfolio'] = function(req, res) {
      // Website you wish to allow to connect
         res.jsonp({ "my": "object" });
};

当我这样做时:

$.getJSON('http://127.0.0.1:8080/portfolio', function(data){ console.log(data)});

我收到这个错误。

XMLHttpRequest cannot load http://127.0.0.1:8080/portfolio. The 'Access-Control-Allow-Origin' header has a value 'http://127.0.0.1:8080/portfolio' that is not equal to the supplied origin. Origin 'http://api.jquery.com' is therefore not allowed access.

谁能解释一下这是怎么回事?如果这是 JSONP,为什么我们需要提供 header 值。我怎样才能使这项工作跨域?

$.getJSON 不会将请求视为 JSONP ,除非 请求 URL 包含类似 callback=?.

的字符串

所以,尝试这样做;

$.getJSON('http://127.0.0.1:8080/portfolio?callback=?', function(data){ console.log(data)});

实际上,您只需添加 ?callback=?,jQuery 完成剩下的工作。

  $(document).ready(function() {
        $.getJSON('http://127.0.0.1:8080/portfolio?callback=?', function(data) {
            console.log(data);
        });
    });

来源:http://api.jquery.com/jQuery.getJSON/

将以下代码放入app.js或server.js

/*************允许访问跨域请求*************/

   app.all('*', function(req, res, next) {
           res.header('Access-Control-Allow-Origin', '*');
           res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
           res.header('Access-Control-Allow-Headers', 'Content-Type');
           next();
   });

   /*************To Allow access to cross domain request *************/

使用 $.ajax 数据类型 jsonp

$.ajax({
    type: 'GET',
    cache: false,
    url: 'http://portfoliomanager-sran.rhcloud.com/portfolio?callback=?',
    dataType: 'jsonp'  
}).then(function(response){
console.log(response);
});