2011-01-06 14 views
0

により送信されたフォームの入力値を取得する:ここNode.jsのは、私はjqueryのAJAX呼び出しによって送られたのNode.jsでフォームの入力値を取得することはできませんなぜ私が把握することはできませんクライアント

は、クライアント側のjQueryのですコード:

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); 

しかしrequest.on( 'データ')とrequest.on(」:

私は、データを取得しようNode.jsの中に今
$('#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) { 
    .... 
    } 
}) 

は、jQueryのAjaxのリクエストで送信終わり)は決して呼び出されません。私はNode.jsのあなたは非同期関数であるpath.exists()を使用している0.2.6

+0

私は応答が正常に動作しない、コードを見てからこれを破ることは何も考えることができません?リスナーが実際に追加されているかどうか確認しましたか?あなたが私たちに情報を提供したり、完全なコードを投稿することができれば、私たちは物事をテストすることができます。 PS:あなたは非常に矛盾したコーディングスタイルを持っています。 –

+0

btwの場合、(XMLHttpRequest)という識別子が(ブラウザで)すでに取得されています。パラメータ名として使用しないでください。代わりに 'xhr'を使用してください(例えば) –

+0

@Ivo私は今、コーディングスタイルを気にしません。私はnode.jsを実験していて、私の問題を解決しようとしています。ところで、このコードは主にチュートリアルのものです。 @responseはいそれは動作し、クライアントは文字列 "worked"を受け取る – user4479145

答えて

1

を-v使用しています。これは、コールバックを実際に実行するまで要求リスナーを登録しないと問題になります。

ソリューションは、あなたがpath.exists()を実行し、コールバックにそれを再開する前に、リクエストを一時停止することです:

... 
request.pause(); 
path.exists(filename, function(exists) { 
    //register request listeners 
    ... 
    request.resume(); 
} 
関連する問題