2014-05-21 12 views
5

Sử dụng Ajax, tôi đang cố gắng để chỉ cần gửi dữ liệu đến một máy chủ Json nút không xử lý liên quan đến chỉ cảnh báo khi gửi và cảnh báo khi nó nhận được:Node.js, Ajax gửi và nhận Json

Đây là tôi html5 : nút đơn giản với một chức năng onclick để kích hoạt chức năng sử dụng cuộc gọi 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> 

Đây là một phần của máy chủ nút của tôi: để tạo một máy chủ và lắng nghe đối với một số hành động

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

Không có cảnh báo nào bị sa thải nên tôi không nghĩ rằng ajax đang cố gắng gửi thông tin.

+1

Mở giao diện điều khiển của bạn, bạn có thấy bất kỳ lỗi nào? – tymeJV

+2

Mở tab Công cụ dành cho nhà phát triển của bạn, bạn có thấy yêu cầu mà bạn mong đợi và phản hồi bạn mong đợi không? – Quentin

+1

Tại sao bạn nói jQuery mong đợi JSON khi bạn có một loại nội dung văn bản/đơn giản? Tại sao bạn gửi phản hồi 200 mà không có nội dung phản hồi? – Quentin

Trả lời

5

thử loại này ở phía máy chủ:

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

và điều này trên các mặt hàng:

$.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)); 
    }) 

Hope làm việc này cho bạn

+0

Ví dụ này làm việc cảm ơn bạn! Jus một điều một khung là mất tích sau khi "IE"}} nó phải là "IE"}}) –

+1

chỉnh sửa được thực hiện nhờ – azero0

1

Bạn không thể sử dụng response.write() hoặc response.end() với đối tượng javascript đơn giản, bạn chỉ có thể ghi Bộ đệm hoặc chuỗi.

Vì vậy, những gì bạn cần làm là xâu chuỗi đối tượng trước tiên. Hoặc thay đổi response.end(store); thành response.end(JSON.stringify(store)); hoặc không store = JSON.parse(store); ở vị trí đầu tiên (trừ khi bạn đang thực hiện nó để xác thực JSON - và nếu trường hợp đó bạn nên bọc nó trong một lần thử vì JSON.parse() sẽ ném vào lỗi phân tích cú pháp) .

Các vấn đề liên quan