jQuery的getJSON不响应,但直接访问

我将我的工作从旧环境迁移到新环境。 我在更新过时的代码与更新的中间,它似乎运行良好(我的web服务写在node.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 }); 

然而在萤火虫控制台显示:

 "http://URL.com:8888/getTables 200 OK 64ms" 

没有回应

如果我直接去“http://URL.com:8888/getTables”网站,我得到我的数据。

任何想法是怎么回事? 我将离开Web服务运行,所以你可以看到我在说什么。

使用它的网站是http://www.URL.com/db/index.html

编辑:

  app.get('/getTables', function(req, res){ console.log('GET request to /getTables'); getTables(req, res); sendJSON(res, 200, cache_tables); }); function sendJSON(res, httpCode, body) { var response = JSON.stringify(body); res.send(response, {'Access-Control-Allow-Origin': '*'}, httpCode); } 

UPDATE

我发现我的解决scheme,感谢让我知道我的问题是跨域,我以为我的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

这个问题进入更详细的问题如何发送一个AJAX请求在不同的端口与jQuery?

这里是另一篇文章,详细介绍了CORs http://www.bennadel.com/blog/2327-Cross-Origin-Resource-Sharing-CORS-AJAX-Requests-Between-jQuery-And-Node-js.htm

[下面的评论更新]

我发现一个post,有一个示例设置使用快递服务JSONP,希望这将有助于…

http://kiwidev.wordpress.com/2011/07/18/node-js-expressjs-and-jsonp-example/

该post的代码示例如下:

表示应用程序

 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>