2016-12-25 2 views
0

У меня было много времени, чтобы понять причину. Почему мой сервис Node.js работает очень хорошо, используя почтальон. Если вы посмотрите ниже, вы увидите, что моя служба node.js работает идеально. Но Jquery код (вызов GetAllNotifyTypesFunc();)Как использовать Node.js без обратного вызова внутри запроса jquery ajax?

дает мне ошибку: (как назвать правильно как почтальона и 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

Вы говорите jquery, что ответ будет jsonp, но это json. Вы должны проверить разницу, я полагаю, что вы должны использовать:

dataType: "json", 

JSONP является Ф.О. исполняемых функций см (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». Поэтому исходный адрес http://127.0.0.1:13227 'не допускается. send @ jquery-2.0.3.min.js: 6 Test.html: 36 error error NetworkError: не удалось выполнить 'send' on 'XMLHttpRequest': не удалось загрузить 'http://127.0.0.1:5000/Notifies ? _ = 1482684143180' . – Penguen

+1

@Penguen - Знаете ли вы, какие ограничения безопасности для кросс-оригинала находятся в браузере? Вы не можете запрашивать вызовы ajax с сайта, отличного от домена текущей страницы, если этот сайт явно не разрешает запросы на перекрестный поиск. Вы можете найти «node.js CORS», чтобы узнать, как включить запросы кросс-генерации на вашем сервере node.js. Почтальон не ограничивает запросы на перекрестный поиск, как это делает браузер. – jfriend00

Смежные вопросы