2016-12-25 5 views
0

私は、なぜ私のNode.jsサービスが郵便配達員を使って非常にうまくいっているのかの理由を理解するために多くの時間を過ごしてきました。あなたが私のnode.jsサービスが完璧に動作しているのを見ることができます。しかし、jQueryのコードは、(GetAllNotifyTypesFunc()を呼び出す;)jquery ajaxリクエスト内でNode.jsをコールバックなしで使用するにはどうすればよいですか?

は私にエラーを与える:(コールバックせずに正しい郵便配達やjqueryの両方を呼び出す方法?)

enter image description here

のNode.js:


'use strict'; 
var express = require("express"); 
var app = express(); 
var MongoClient = require('mongodb').MongoClient; 
var router = express.Router(); 

app.get('/Notifies', function (req, res) { 
    MongoClient.connect('mongodb://127.0.0.1:27017/Test', function (err, db) { 
     if (err) throw err; 
     var coll = db.collection('Notifies'); 
     coll.find({}).toArray(function (err, result) { 
      if (err) { 
       res.send(err); 
      } else { 

       // res.writeHead(200, { 
       // 'Content-Type': 'application/json' 
       // }); 
       // res.end('callback(\'' + JSON.stringify(result) + '\')'); 
       res.writeHead(200, { 
        'Content-Type': 'application/json' 
       }); 
       res.end(JSON.stringify(result)); 
       // res.json(result); 
      } 
     }) 
    }) 
}); 

var port = Number(process.env.PORT || 5000); 
app.listen(port, function() { 
    console.log("Listening on " + port); 
}) 

私が郵便番号を使用する場合:

enter image description here

$(function() { 

    GetAllNotifyTypesFunc(); 

}); 

var GetAllNotifyTypesFunc = function() { 
    console.log("notify"); 

    $.ajax({ 
     url: 'http://127.0.0.1:5000/Notifies', 
     dataType: "jsonp", 
     async: false, 
     //jsonpCallback: "callback", 
     cache: false, 
     timeout: 5000, 
     success: function (data) { 
      console.log(data); 
      console.log(JSON.parse(data)); 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { 
      alert('error ' + textStatus + " " + errorThrown); 
     } 
    }); 


} 

答えて

1

回答はjsonpですが、それはjsonです。あなたは違いをチェックする必要があり、私はあなたが使用する必要があることとします

dataType: "json", 

JSONPは、実行可能な機能foがある、(What are the differences between JSON and JSONP?

+0

何のクロスドメインについて参照してください? jsonpなしで、私はクロスドメインを扱うことができますか? – Penguen

+0

jquery-2.0.3.min.js:6 XMLHttpRequestはhttp://127.0.0.1:5000/Notifies?_=1482684143180を読み込めません。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーが存在しません。 Origin 'http://127.0.0.1:13227'はアクセスが許可されていません。send @ jquery-2.0.3.min.js:6 Test.html:36エラーエラーNetworkError: 'XMLHttpRequest'で 'send'を実行できませんでした:読み込みに失敗しました 'http://127.0.0.1:5000/Notifies ?_ = 1482684143180 '。 – Penguen

+1

@ Penguen - ブラウザにクロスオリジンのセキュリティ制限があるかどうか知っていますか?現在のページのドメイン以外のサイトからajax呼び出しを要求することは、そのサイトがクロスオリジン要求を明示的に有効にしていない限りは実行できません。 「node.js CORS」を検索すると、node.jsサーバーでクロスオリジン要求を有効にする方法を調べることができます。 Postmanは、ブラウザのようにクロスオリジンのリクエストを制限しません。 – jfriend00

関連する問題