2014-05-21 12 views
5

Utilizzando Ajax, sto cercando di inviare solo i dati JSON a un server di nodo di alcuna elaborazione coinvolto solo avvisando quando viene inviata e avvisando quando è ricevuto:Node.js, Ajax invio e la ricezione JSON

Questo è il mio html5 : pulsante semplice con una funzione onclick per attivare la funzione di utilizzare la chiamata AJAX

<!DOCTYPE HTML> 
<html> 
    <head> 
     <script> 
      function send() 
      { 
       //alert("Hello World"); 
       $.ajax 
       ({ 
        type: "post", 
        url: "http://localhost:8000", 
        dataType: "json", 
        contentType: "application/json; charset=UTF-8", 
        data: JSON.stringify({name: "Dennis", address: {city: "Dub", country: "IE"}}) 
       }).done(function (data) {alert("ajax callback response:" + data); 
      }); 
     </script> 
    </head> 
    <body> 
     <button onclick="send()">Click Me!</button> 
    </body> 
</html> 

Questa è una parte del mio server nodo: per la creazione di un server e di ascolto per certe azioni

var port = 8000; 
var server = http.createServer(); 
server.on('request', request); 
server.listen(port); 

function request(request, response) 
{ 
    var store = ''; 
    response.writeHead(200, {"Content-Type": "text/json"}); 
    request.on('data', function(data) 
    { 
     store += data; 
    }); 
    request.on('end', function() 
    { 
     store = JSON.parse(store); 
     console.log(store); 
     response.end(store); 
    }); 
} 

Nessun avviso viene generato, quindi non credo che l'ajax stia tentando di inviare le informazioni.

+1

Aprire la console, cosa vedi eventuali errori? – tymeJV

+2

Apri la scheda Rete degli strumenti per sviluppatori, vedi la richiesta che ti aspetti e la risposta che ti aspetti? – Quentin

+1

Perché stai dicendo a jQuery di aspettarsi JSON quando hai un testo/tipo di contenuto semplice? Perché stai inviando una risposta di 200 senza corpo di risposta? – Quentin

risposta

5

provare questo sul lato server:

var port = 8000; 
var http = require("http"); 
var server = http.createServer(); 
server.on('request', request); 
server.listen(port); 
function request(request, response) { 
    var store = ''; 

    request.on('data', function(data) 
    { 
     store += data; 
    }); 
    request.on('end', function() 
    { console.log(store); 
     response.setHeader("Content-Type", "text/json"); 
     response.setHeader("Access-Control-Allow-Origin", "*"); 
     response.end(store) 
    }); 
} 

e questo sul lato client:

$.ajax 
({ 
    type: "POST", 
    url: "http://localhost:8000", 
    crossDomain:true, 
    dataType: "json", 
    data:JSON.stringify({name: "Dennis", address: {city: "Dub", country: "IE"}}) 
}).done(function (data) { 
     alert("ajax callback response:"+JSON.stringify(data)); 
    }) 

Spero che questo funziona per voi

+0

Questo esempio ha funzionato grazie! Jus una cosa manca una parentesi dopo "IE"}} dovrebbe essere "IE"}}) –

+1

la modifica è fatta grazie – azero0

1

Non è possibile utilizzare response.write() o response.end() con un oggetto javascript normale, è possibile solo scrivere buffer o stringhe.

Quindi ciò che devi fare è prima stringificare l'oggetto. Cambiare lo response.end(store); in response.end(JSON.stringify(store)); o non lo store = JSON.parse(store); in primo luogo (a meno che non lo si stia facendo per convalidare il JSON - e in tal caso dovresti inserirlo in un try-catch perché JSON.parse() genererà un errore di analisi) .