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);
});
});
将以下代码放入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);
});
我很确定 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);
});
});
将以下代码放入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);
});