2011-01-06 54 views
0

發送表單輸入的值我想不通,爲什麼我不能檢索通過一個jquery Ajax調用發送node.js的形式輸入值:node.js中檢索由客戶端

這裏是客戶端的jQuery代碼:

$('#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) { 
    .... 
    } 
}) 
現在

在node.js中我嘗試恢復數據發送由jQuery的Ajax請求:

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 -v 0.2.6

+0

我想不出任何會打破這個從看代碼,做正確的處置工作?你有沒有檢查是否實際添加了聽衆?如果您能夠提供更多信息或發佈完整的代碼,那麼我們就可以測試一下。 PS:你的編碼風格非常不一致。 – 2011-01-06 18:41:30

回答

1

您正在使用path.exists()這是一個異步函數。當您註冊您的請求偵聽器時,這會成爲一個問題,除非您正在執行此回調。

解決的辦法是暫停請求你執行path.exists()並在回調恢復它之前:

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