2011-01-06 3 views
0

ich nicht herausfinden kann, warum ich nicht die Formulareingabewerte in node.js von einem Jquery Ajax-Aufruf gesendet abrufen kann:node.js Abrufen von Werten Formulareingabe von Client gesendet

hier

wird die Client-Seite jQuery Code:

$('#send-button').click(function(event) { 
event.preventDefault(); 
var str = $('#form-contact').serialize(); 
$.ajax({ 
    type: 'POST', 
    url: "contact", 
    data: str, 
    success: function(msg) { 
    .... 
    }, 
    error: function(XMLHttpRequest, textStatus) { 
    .... 
    } 
}) 

jetzt in node.js i versuchen, die Daten senden, indem Sie die jQuery-ajax-Anforderung abzurufen:

var sys = require("sys"), 
    http = require("http"), 
    url = require("url"), 
    path = require("path"), 
    qs = require('querystring'), 
    fs = require("fs"), 

var server = http.createServer(function(request, response) { 

    ..... 

    path.exists(filename, function(exists) { 
     if(!exists) { 
      if (paramUri == "/contact") { 

       if (request.method == 'POST') { 
       var body = ''; 

       request.on('data', function(chunk) { 
        body += chunk; 
       }); 

       request.on('end', function() { 
        console.log(body); 
       }) 

       } 

       response.writeHead(200, {'Content-Type': 'text/plain'}); 
       response.end('worked'); 
       return; 
      } 

      response.writeHead(404, {"Content-Type": "text/plain"}); 
      response.write("404 Not Found\n"); 
      response.end(); 
      return; 
     } 

     ...... 
    }); 
}) 

server.listen(8080); 

aber die request.on ('Daten') und request.on (‘ Ende ') werden nie aufgerufen. Ich verwende node.js -v 0.2.6

+0

ich an nichts denken kann, dass diese aus Blick auf dem Code brechen würde, funktioniert die Antwort richtig funktioniert ? Haben Sie überprüft, ob die Listener tatsächlich hinzugefügt wurden? Wäre toll, wenn Sie uns mehr Informationen geben oder den vollständigen Code veröffentlichen könnten, damit wir die Dinge testen können. PS: Sie haben einen sehr inkonsistenten Programmierstil. –

+0

BTW, die Kennung 'XMLHttpRequest' ist bereits vergeben (in den Browsern). Verwenden Sie es nicht als Parametername. Verwenden Sie 'xhr' stattdessen (zum Beispiel) –

+0

@Ivo ich interessiere mich nicht für den Kodierungsstil jetzt, ich experimentiere gerade mit node.js und versuche, mein Problem zu lösen. Übrigens stammt dieser Code hauptsächlich von einem Tutorial. @response ja es funktioniert, Client erhält die Zeichenfolge "bearbeitet" – user4479145

Antwort

1

Sie verwenden path.exists(), die eine asynchrone Funktion ist. Dies wird zu einem Problem, wenn Sie Ihre Request-Listener erst registrieren, wenn Sie diesen Callback gerade ausführen.

Die Lösung ist, die Anforderung zu pausieren, bevor Sie path.exists() ausführen und es in dem Callback wieder auf:

... 
request.pause(); 
path.exists(filename, function(exists) { 
    //register request listeners 
    ... 
    request.resume(); 
} 
Verwandte Themen