【问题标题】:AJAX call and getting return data in NodeAJAX 调用并在 Node 中获取返回数据
【发布时间】:2016-05-14 17:22:22
【问题描述】:

我想从客户端向后端进行 ajax 调用。我从成功函数中获得了成功的调用,但是,我无法理解如何从服务器获取数据以从客户端返回。

目前我尝试使用 res.send 的错误是:

Error: Can't set headers after they are sent.

AJAX

function getProfessorResults() {
      var textData = $('#inputsm').val();

      var data = {user:"gopal@gmail.com"};
      $.ajax({
          url: 'http://localhost:3000',
          data: { theme: "somevalue", snippet: { name: "somename", content: "somevalue" } },
          method: 'POST',
          async: false,
          cache: false,
          timeout: 5000,
          contentType: "application/json",
          success: function(data) {
              console.log("success");
          },
          complete: function(data) {
            console.log("completed");
          },
          error: function(jqXHR, textStatus, errorThrown) {

              alert('Error connecting to the Node.js server... ' + textStatus + " " + errorThrown);
          }
      });
    }

JS 后端

exports.home = function(req, res) {


  function passList(profArray, callback) {
    setTimeout(function () {
      callback(profArray);
    }, 1000);
  }


  function getProfs(teacher_name, successCallback) {

    google.resultsPerPage = 10
    var nextCounter = 0

    google(teacher_name, function (err, res){
      if (err) console.error(err)
      var teacher_results = []; //Hold all the teachers returned from the function
      for (var i = 0; i < res.links.length; ++i) {
        var link = res.links[i];
        if (!link.title.includes('Add') || !link.title.includes('RATINGS') || !link.title.includes("Hint")) {

            teacher_results.push(link.title);

        }//End if for comparisons ||
      } //End For
      successCallback(teacher_results);
    }); //End google function
      teacher_results = ['tester1', 'tester2'];
      successCallback(teacher_results);
  } //End searchForProfessor


  getProfs(teacher_name, function(data) {
    prof_list = data;
    console.log(prof_list);
    return true;
  });


  if (req.method == 'POST'){
      console.log("true");
      // dataReceived = JSON.parse(req);
      // console.log(dataReceived);
      var obj = {
          tid: 'ryan'
      };

      res.send(JSON.stringify(obj));
   }



  res.render('home', {
    profs: prof_list,
    dataStuff : dataReceived
  });
};

【问题讨论】:

  • return 去哪里?需要了解更多关于服务器代码上下文的信息
  • 假设我在服务器端调用了一个方法。我希望来自服务器的数据返回,比如一串数据或 JSON obj,返回给客户端,这样我就可以将它扔到我的模板中。
  • 您需要包含更多的 JS 后端代码。
  • @JAM 更新了原文
  • 我认为发生错误是因为您在 res.send 之后调用 res.render。

标签: javascript jquery ajax node.js


【解决方案1】:

在后端,您应该有一些路由可以到达您的 AJAX 调用。在那里,您可以在回复中调用send

在 node.js/express 中,这看起来像

app.get('/ajaxURL', function (req, res) {
  res.send('I want this string to return to the client');
});

要从前端访问数据,请在 AJAX 回调中访问它:

$.ajax({url: '/ajaxURL'}).done(function (data) {
    console.log(data);
});

【讨论】:

  • 如何在客户端的ajax函数中访问res.send中的数据?
  • 你有成功回调,它有参数数据,所以你可以通过读取这个参数来访问
  • 我创建了一条新路线,它正在处理返回的数据,这正是我想要的。我仍然遇到的问题是当我做 res.send(req.body) 时,返回数据是空白的。是否有一个原因?它不应该打印我从初始 AJAX 调用传递给它的数据吗?
  • 您可能需要先解析请求的主体,然后才能访问它(例如 Express 有一个名为 bodyparser 的中间件),或者您可能无法将对象发送回服务器(尝试 res.send( JSON.stringify(req.body)) 看看这是否是罪魁祸首)。如果这没有帮助,请再问一个问题。
【解决方案2】:

我没有正确理解上下文,但你可以通过这个例子弄清楚。

从服务器发送数据 response.send("Your data"); 以 AJAX 的成功方法在您的客户端中访问此数据: success:function(data){console.log(data)};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多