如何使用ajax在javascript中获取node.js的响应?

时间:2015-10-26 09:28:46

标签: javascript jquery html ajax node.js

screen shot of network panel

screen shot of console panel

我想通过使用ajax函数将表单详细信息发送到node.js服务器我能在控制台中看到我发送的内容

但是我无法从node.js服务器获得任何响应到html ajax函数

server.js

var http = require('http');
http.createServer(function(request, response) {     
request.on('data', function (chunk) {   
    var res=chunk.toString('utf8');
    var obj=JSON.parse(res);
    var region=obj.region;
    var os=obj.os;              
    console.log(region);
    console.log(os);    
}); 
//var data="hi";
//how to send data
//response.send(data);
}).listen(8088);

client.html

<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
function myFunction() { 
var region = document.getElementById("region").value;
var os = document.getElementById("os").value;  
var data = {};
data.region = region;
data.os = os;
$.ajax({
 type: 'POST',
 jsonpCallback: "callback",
 datatype: 'jsonp',
 data: JSON.stringify(data),
 //contentType: 'application/json',
 url: 'http://127.0.0.1:8088/', //node.js server is running
 success: function(data) {
   alert("success");
   console.log(JSON.stringify(data));
 },
 error: function (xhr, status, error){
    console.log('Failure');
    alert("failure");
    },
 });
}
</script>
</head>
<body>
<form>
<input type="text" id="region" name="region"/>
<input type="text" id="os" name="os"/>
<input type="button" value="search" class="fil_search" onclick="myFunction()"/>
</form>
</body>
</html>

帮我解决一下如何从node.js服务器获取响应。我希望在html页面中看到成功消息的警告框

2 个答案:

答案 0 :(得分:1)

您应该添加request.on(&#39; end&#39;)事件,该事件将在收到所有数据并完成http请求时触发:

数据:每当正文数据进入TCP套接字级别时都会触发。请注意,这不一定包含所有数据,因此它被称为块。

结束:HTTP请求完成时触发。这表示已读取与其关联的所有正文数据,并且已触发相应的数据事件。

var http = require('http');

http.createServer(function(request, response) {     
  request.on('data', function (chunk) {  
    console.log("Received body data", chunk.toString());
    // chunk is received, process it as you need
  }); 
  request.on('end', function() {
    // http request is competed, send response to client
    response.writeHead(200, "OK", {'Content-Type': 'text/html'});
    response.end();
  })
}).listen(8088);

答案 1 :(得分:1)

发生这种情况的原因是您从 127.0.0.1:8088 协议加载file://。这是浏览器的一种不安全的可疑操作,它不允许它为了保护您。

您现在有两个选择:

  1. Enable CORS on your node.js - 让node.js服务器告诉您的浏览器可以加载来自不同域的请求。
  2. Serve your client2.html from Node.js - 您应该使用网址路径{{1}来代替file://,而不是来自任何其他网络服务器的节点js client2.html }。
  3. 我提供的链接包含您问题的解决方案,即CORS error。没有正确配置Node.js脚本就没有解决方案。