jquery getJSON不响应,但直接访问会响应
我正在将我的工作从旧环境迁移到新环境。IM在更新过时代码的中间,更新的代码运行得很好(我的Web服务写在No.js) 我的Web服务运行在node.js中,我的站点使用jquery。 node.js代码jquery getJSON不响应,但直接访问会响应,jquery,node.js,Jquery,Node.js,我正在将我的工作从旧环境迁移到新环境。IM在更新过时代码的中间,更新的代码运行得很好(我的Web服务写在No.js) 我的Web服务运行在node.js中,我的站点使用jquery。 node.js代码 var express = require('express'); var app = express(); app.get('/', function(req, res){ console.log('GET request to /'); }); app.listen(8888);
var express = require('express');
var app = express();
app.get('/', function(req, res){
console.log('GET request to /');
});
app.listen(8888);
console.log('Express server started on port 8888');
这是我的jquery代码
$.getJSON('http://URL:8888/getTables', function(data){
//stuff
});
但是在firebug中,控制台显示:
"http://URL.com:8888/getTables 200 OK 64ms"
没有回应
如果我直接去现场
"http://URL.com:8888/getTables"
我得到我的数据
知道发生了什么事吗?我会让web服务继续运行,这样您就可以看到我在说什么了
正在使用它的站点是
编辑:
更新
我找到了我的解决方案,感谢您让我知道我的问题是跨域的,我认为我的sendJSON解决了这个问题,但由于我升级了nodejs和模块,它可能已经过时了。以下是一些疑惑的人的解决方案:
//Middleware: Allows cross-domain requests (CORS)
var allowCrossDomain = function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
}
//App config
app.configure(function() {
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: 'secret' }));
app.use(express.methodOverride());
app.use(allowCrossDomain);
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
我必须更新我的所有使用权限:
app.get('/', function(req, res, next){
console.log('GET request to /');
});
这是因为您正在另一个端口上运行服务器,因此它被视为x域。您可以将其设置为使用JSONP 所以这个问题更为详细 下面是另一篇关于CORs的详细文章 [以下更新以供评论] 我发现了一篇文章,其中有一个使用express提供jsonp的示例设置,希望这会有所帮助 该帖子的代码示例如下: express应用程序
var express = require('express');
var app = module.exports = express.createServer();
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.get('/logget', function(req, res){
console.log('get to log');
console.log(req.query.callback);
console.log(req.param('somedata'))
res.header('Content-Type', 'application/json');
res.header('Charset', 'utf-8')
res.send(req.query.callback + '({"something": "rather", "more": "pork", "tua": "tara"});');
});
app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
访问它的HTML页面
<html>
<head>
<title>jsonp test</title>
<script src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
<script type="text/javascript">
$(function(){
$('#jsonThingLink').click(function(e){
e.preventDefault();
console.log('jsonThingLink clicked');
$.ajax({
dataType: 'jsonp',
data: "somedata=blahblah",
jsonp: 'callback',
url: 'http://localhost:3000/logget?callback=?',
success: function(data) {
console.log('success');
console.log(data);
console.log(data.more);
}
});
});
});
</script>
</head>
<body>
<div id="jsonThing"><a href="#" id="jsonThingLink">test jsonp</a></div>
</body>
</html>
jsonp测试
$(函数(){
$('#jsonThingLink')。单击(函数(e){
e、 预防默认值();
log('jsonthinglinkclicked');
$.ajax({
数据类型:“jsonp”,
数据:“somedata=blahblah”,
jsonp:“回调”,
网址:'http://localhost:3000/logget?callback=?',
成功:功能(数据){
console.log('success');
控制台日志(数据);
console.log(data.more);
}
});
});
});
这是因为您正在另一个端口上运行服务器,因此它被视为x域。您可以将其设置为使用JSONP
所以这个问题更为详细
下面是另一篇关于CORs的详细文章
[以下更新以供评论]
我发现了一篇文章,其中有一个使用express提供jsonp的示例设置,希望这会有所帮助
该帖子的代码示例如下:
express应用程序
var express = require('express');
var app = module.exports = express.createServer();
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.get('/logget', function(req, res){
console.log('get to log');
console.log(req.query.callback);
console.log(req.param('somedata'))
res.header('Content-Type', 'application/json');
res.header('Charset', 'utf-8')
res.send(req.query.callback + '({"something": "rather", "more": "pork", "tua": "tara"});');
});
app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
访问它的HTML页面
<html>
<head>
<title>jsonp test</title>
<script src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
<script type="text/javascript">
$(function(){
$('#jsonThingLink').click(function(e){
e.preventDefault();
console.log('jsonThingLink clicked');
$.ajax({
dataType: 'jsonp',
data: "somedata=blahblah",
jsonp: 'callback',
url: 'http://localhost:3000/logget?callback=?',
success: function(data) {
console.log('success');
console.log(data);
console.log(data.more);
}
});
});
});
</script>
</head>
<body>
<div id="jsonThing"><a href="#" id="jsonThingLink">test jsonp</a></div>
</body>
</html>
jsonp测试
$(函数(){
$('#jsonThingLink')。单击(函数(e){
e、 预防默认值();
log('jsonthinglinkclicked');
$.ajax({
数据类型:“jsonp”,
数据:“somedata=blahblah”,
jsonp:“回调”,
网址:'http://localhost:3000/logget?callback=?',
成功:功能(数据){
console.log('success');
控制台日志(数据);
console.log(data.more);
}
});
});
});
请原谅我的无知,我需要将我的代码调整为“?”,并对我的nodejs web服务进行哪些更改添加了另一个链接并添加了页面上的代码。希望这有帮助。我今天要测试一下。非常感谢你的帮助。如果我不能,我可能不得不从头开始编写我的服务器,因为我使用的是node.js和expressor的旧版本。请原谅我的无知,我需要将代码调整为“?”,我对我的nodejs web服务做了哪些更改添加了另一个链接并添加了页面上的代码。希望这有帮助。我今天要测试一下。非常感谢你的帮助。如果我不能,我可能不得不从头开始编写服务器,因为我使用的是node.js和express的旧版本