2

目的:
1) NodeJs Web サーバーで実行される Web サイト ウィッチを作成します。(expressjs、stylus、jade) + NodeJS
2) NodeJs Web サーバー (expressjs) + NodeJS で RESTful Web サービスを作成する
3) Web サイトが Restful Web サービス エントリ (javascript ファイル) を呼び出す


ubuntu ターミナルを使用して、ウェブサイト用の nodeJs を開始し、残りの webservice 用に別の nodeJs を開始します。安らかな Web サービスのテスト (ブラウザーで):

URL:localhost:1337/wines/

データの結果: [ { "name": "New wine", "Year": "2012", "_id": "50e8255197f0b5260f000001" } ]

ウェブサイト URL のテスト: localhost:3000/

これは、Web サイトで使用される私の JavaScript ファイルです。ここでは、残りの URL localhost:1337/wines/ を呼び出して、結果データを取得します。

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 /wines/ 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 () コールバック OK にジャンプします
が、'readystate=4 ですが、this.status = 0' で、結果が得られません

最後に、このエラーが発生します:
コンポーネントが失敗コードを返しました: 0x80004005 (NS_ERROR_FAILURE)


firebug からの結果情報 (この Java スクリプトのデバッグに使用)

コンテンツ タイプ アプリケーション/json; charset=utf-8
Date Sun, 06 Jan 2013 04:15:07 GMT
X-Powered-By Express
Request Headers
Accept text/html,application/xhtml+xml,application/xml;q=0.9, / ;q=0.8
Accept -Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
接続 キープアライブ
Host localhost:1337
Origin //localhost:3000
Referer //localhost:3000/
User-Agent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko/20100101
Firefox/13.0.1


スタック オーバーフローを検索しましたが、「クロス ドメインの問題」である可能性があるため、安静な Web サービスに 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...');

まだ結果はありません。この問題を解決する方法を知っている人はいますか? 多くの感謝

4

1 に答える 1

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();
于 2013-01-06T05:11:10.340 に答える