jquery getJSON不响应,但直接访问会响应

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);

我正在将我的工作从旧环境迁移到新环境。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);
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的旧版本