我很确定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)});
我得到这个错误。
谁能解释一下这是怎么回事?为什么我们需要提供报头值,如果这是JSONP。我如何使它跨域工作?XMLHttpRequest无法加载http://127.0.0.1:8080/portfolio。的'Access-Control-Allow-Origin'头有一个值'http://127.0.0.1:8080/portfolio',它不等于所提供的来源。因此,不允许使用原产地"http://api.jquery.com"访问。
$.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);
});