2016-12-24 1 views
0

Ich bin .net Entwickler. Ich entschied mich, Node.js zu lernen, indem ich ein Beispiel benutzte. Ich habe einen node.js-Dienst erstellt, um Daten aus der Mongo-Datenbank zu sammeln. Und dann habe ich eine HTML-Webseite. Ich habe einen einfachen jquery-Code verwendet, um diesen node.js-Webdienst zu erhalten. Aber ich habe diesen Fehler behoben: Die angeforderte JSON-Analyse ist fehlgeschlagen.Wie Node.js-Dienst in Jquery-Skript aufrufen?

Mein Db:

{ "_id": ObjectId ("58568264477db6913051a0cf"), "Name": "yusuf" }

{ "_id": ObjectId ("58568381477db6913051a0d0") , "Name": "Leyla" }

Mein Server Code: (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.send(result); 
      } 
     }) 
    }) 

}); 

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

JQuery:


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

     $.ajax({ 
      url: 'http://127.0.0.1:5000/Notifies', 

      type: 'GET', 
      dataType: 'jsonp', 
      async: false, 
      contentType: 'application/json; charset=utf-8', 
      success: function (data) { 
       var str = ''; 
       console.log(data); 
       $.each(data, function (idx, elem) { 
        console.log(elem.Name); 
        str += "\"" + elem.Name + "\"" + " : " + "{ \"!type\": \"bool\" }" + ","; 
       }); 

       str = str.substring(0, str.length - 1);; 
       str = "{" + str + "}"; 
       localStorage.removeItem("alarms"); 
       localStorage.setItem('alarms', str); 
      }, 

      error: function (jqXHR, exception) { 
       var msg = ''; 
       if (jqXHR.status === 0) { 
        msg = 'Not connect.\n Verify Network.'; 
       } else if (jqXHR.status == 404) { 
        msg = 'Requested page not found. [404]'; 
       } else if (jqXHR.status == 500) { 
        msg = 'Internal Server Error [500].'; 
       } else if (exception === 'parsererror') { 
        msg = 'Requested JSON parse failed.'; 
       } else if (exception === 'timeout') { 
        msg = 'Time out error.'; 
       } else if (exception === 'abort') { 
        msg = 'Ajax request aborted.'; 
       } else { 
        msg = 'Uncaught Error.\n' + jqXHR.responseText; 
       } 
       console.log(msg); 
      } 

Das obige Code Rückkehr mir dieser Fehler: Gewünscht JSON Parse fehlgeschlagen.

+0

1. Warum "Jsonp" als Accept-Header verwenden? Wenn Sie sagen: "Okay, die Antwort wäre" application/jsonp "** Sie müssen einen Rückruf bereitstellen, um die Antwort zu dekodieren **. Denken Sie daran, json! = Jsonp. 2. Wenn Ihr Dienst in einer anderen Domäne ist, aktivieren Sie einfach CORS Server für Ihre Clientdomäne und setzen Sie 'dataType' auf' json'. Für weitere Informationen: 'Request JSON parse failed' geschieht, weil Sie den Callback für die JSONP-Antwort nicht angeben. –

Antwort

1

Da 'parseerror' generiert wird, denke ich, dass Daten nicht im richtigen JSON-Format abgerufen werden.
Versuchen res.json statt res.send in NodeJS Code
Wenn nicht Gebrauch Postman wie HTTP-Client und überprüfen Antwort für '/ Notifys' arbeiten. Sie können JSON parser wie folgt verwenden, um zu überprüfen, ob die Antwort im korrekten JSON-Format ist.