使用javascript调用快速js restful webservice =>结果总是空响应

时间:2013-01-06 04:47:10

标签: javascript web-services node.js restful-architecture

目的:
1)创建一个在NodeJs网络服务器上运行的网站。 (expressjs,stylus,jade)+ NodeJS
         2)在NodeJs网络服务器上创建一个restful webservice             (expressjs)+ NodeJS
         3)该网站调用一个宁静的Web服务条目             (javascript文件)


使用ubuntu终端,我为网站启动了另一个nodeJs webservice.Testing restful webservice(在浏览器中):

地址:本地主机:1337 /葡萄酒/

数据结果是: [   {     “名字”:“新酒”,     “年”:“2012”,     “_id”:“50e8255197f0b5260f000001”   } ]

测试网站 网址:localhost:3000 /

这是我在网站上使用的javascript文件,这里我要打电话给 rest url localhost:1337 / wines / zh得到结果数据。

alert('hello!');  (popup)

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://localhost:1337/wines/');
xhr.onreadystatechange = function () {
  if (this.status == 200 && this.readyState == 4) {
    console.log('response: ' + this.responseText);
    alert("Yes");
  }
};
xhr.send();

在终端中,我看到执行了GET:
宁静的终端:
GET /葡萄酒/ 200 3ms - 93

网站终端:
GET / 200 11ms
GET /JavaScript/script.js 304 1ms
GET /stylesheets/style.css 304 1ms

当我调试时,我这样做:
var xhr = new XMLHttpRequest(); OK
xhr.open('GET','http:// localhost:1337 / wines /'); OK
xhr.send();行

xhr.onreadystatechange = function()跳转到回叫确定
但'readystate = 4但this.status = 0'并且我没有给出结果

最后我得到了这个错误:
组件返回失败代码:0x80004005(NS_ERROR_FAILURE)


来自firebug的结果信息(用于调试此java脚本)

Content-Type application / json;字符集= UTF-8
Date Sun,06 Jan 2013 04:15:07 GMT
X-Powered-By Express
请求标题
接受text / html,application / xhtml + xml,application / xml; q = 0.9, / ; q = 0.8
接受编码gzip,deflate
Accept-Language en-us,en; q = 0.5
连接保持活着
主持人localhost:1337
来源// localhost:3000
Referer // localhost:3000 /
User-Agent Mozilla / 5.0(X11; Ubuntu; Linux x86_64; rv:13.0)Gecko / 20100101
Firefox / 13.0.1


我搜索了堆栈溢出,它可能是一个“跨域问题”,因此我应该 在我的restful webservice中添加一些javascript:

var express = require('express'),
wine = require('./routes/wines');
var app = express();
app.configure(function () {
app.use(express.logger('dev')); /* 'default', 'short', 'tiny', 'dev' */
app.use(express.bodyParser());

//Added part
app.all('/', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "*");
  res.header("Access-Control-Allow-Methods", "XPOST, GET, OPTIONS");
  res.header("Access-Control-Max-Age", "1000");
  next();
 });
//Added part

});

app.get('/wines', wine.findAll);
app.get('/wines/:id', wine.findById);
app.post('/wines', wine.addWine);
app.put('/wines/:id', wine.updateWine);
app.delete('/wines/:id', wine.deleteWine);
app.listen(1337);
console.log('Listening on port 1337...');

  

仍然没有结果,任何人都知道如何解决这个问题?很多人

1 个答案:

答案 0 :(得分:0)

您必须在调用open()之前注册事件处理程序。

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
  if (this.status == 200 && this.readyState == 4) {
    console.log('response: ' + this.responseText);
    alert("Yes");

  }
};
xhr.open('GET', 'http://localhost:1337/wines/');
xhr.send();