如何从ajax接收nodejs数据响应

时间:2017-03-28 19:36:12

标签: javascript jquery node.js ajax express

我目前正在学习express,ajax和nodejs。所以目前我正在尝试使ajax和nodejs相互交互。我正在使用ajax向nodejs服务器发送客户端请求。目前,我可以正确调用服务器中的app.get,即在服务器端调用console.log(req.query);之前它可以正常工作。但是,我无法接受服务器发送的数据。客户端代码不会在我尝试进行任何返回数据时发出警报。

这是我在客户端的代码。

function login(){
  var obj = '{"username":"'+$('#username').val()+'", "password":"'+$('#password').val()+'"}';
  $.ajax({
    type:'GET',
    dataType :'json',
    data:{"username": $("#username").val(),
          "password": $("#password").val()},
    url:'http://localhost:10351/function',
    success: function (data) {
        alert("ajax callaback response:"+JSON.stringify(data));
    }
  })

这是我在服务器端的代码。

var express = require('express');
var app = express();
var http = require("http");
var server = http.createServer();
var portNumber = 10351;
app.use(express.static('public'));

app.get('/function', function(req, res) {
    console.log(req.query);
    res.send(JSON.stringify(req.query));
});

app.listen(portNumber, function() {
    console.log('Currently listening on port ' + portNumber);
});

任何提示?

我在以下链接中查看答案:

Node.js, Ajax sending and receiving Json

我想也许我可以使用response.end和response.setHeader代替? 我不太确定我的问题是在客户端还是服务器端。

2 个答案:

答案 0 :(得分:1)

你不

  1. 收听正确的端口(10901 vs 10351)
  2. 在网址
  3. 的查询部分发送任何参数
  4. 需要JSON.stringify,因为您已经在(req.query)
  5. 中获得了一个字符串

    你应该:

    1. 使端口匹配
    2. 在网址ex:(url:'http://localhost:10351/function?foo=bar
    3. 中发送参数
    4. 删除stringify ex:

      res.send(req.query)

      alert("ajax callaback response:"+data);

    5. 如果您已经使用response.end方法,则不需要

      res.send,如果您想将此内容标记为json,则response.setHeader会有所帮助,因此您可以放置​​{{1}标头, 或者使用Content-Type: application/json为您完成这两件事(将json字符串化并为您添加正确的标题)

答案 1 :(得分:0)

您的端口代码不匹配。你说你的呼叫一直工作到console.log(),如果端口不匹配,它甚至不会在服务器中输入app.get()。 我想你刚刚为客户发布了不同的代码。

我建议你尝试使用chrome扩展名,这对于发送和获取ajax请求响应非常有帮助。只需更改端口号即可使用您的代码,我可以在邮递员中获得响应。