nodejs jsonp - Access-Control-Allow-Origin Error



我很确定JSONP意味着没有跨域限制。我正在尝试使用节点和表达式制作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无法加载http://127.0.0.1:8080/portfolio。的'Access-Control-Allow-Origin'头有一个值'http://127.0.0.1:8080/portfolio',它不等于所提供的来源。因此,不允许使用原产地"http://api.jquery.com"访问。

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

$.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);
}); 

相关内容

  • 没有找到相关文章

最新更新