【问题标题】:How to retrieve data from node.js to Ajax?如何从 node.js 检索数据到 Ajax?
【发布时间】:2019-04-07 00:54:54
【问题描述】:

我正在尝试学习从 Ajax 向 node.js 发送/接收数据。我能够从 ajax 发送数据但无法接收。无法解决问题。如果有人能解释我哪里出错了,那就太好了。

阿贾克斯

$(document).on('submit', '#searchdata', function (e) {
e.preventDefault();
var formData = $(this).serialize();
$.ajax({
 url: location.pathname,
 method: 'POST',
 type: 'POST',
 data: formData,
 processData: false,
 dataType: 'json',
 contentType: 'application/json; charset=utf-8',
 success: function (data) {
                   var ret = JSON.stringify(data);
                   console.log('Success: '+JSON.stringify(data))
               },
               error: function (xhr, status, error) {
                   console.log('Error: ' + JSON.stringify(error));
               },
  });
  });

node.js

    var myData = '';
    request.on('data', function (data) {
        myData += data.toString();
    });
 response.writeHead(200, {
             'Content-Type': 'text/json',
             'Access-Control-Allow-Origin' : '*'});
      response.end(myData);
      });

【问题讨论】:

  • 您在 Ajax 错误处理程序中遇到任何错误吗?
  • 不。我什么也没得到。
  • 你能不能在'JSON.stringify'之前的成功处理程序中添加一个日志,看看它是否正在记录?
  • 嘿,我刚试过,它不起作用
  • 好的,你用的是什么 jQuery 版本?

标签: javascript jquery node.js ajax


【解决方案1】:

我在 jQuery Ajax 文档中看到了这条语句:

弃用通知:jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调从 jQuery 3.0 开始被删除。您可以使用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always() 代替。

// Assign handlers immediately after making the request,
// and remember the jqXHR object for this request
var jqxhr = $.ajax( "example.php" )
  .done(function() {
    alert( "success" );
  })
  .fail(function() {
    alert( "error" );
  })
  .always(function() {
    alert( "complete" );
  });

我相信您将需要更改与文档中上述类似的代码。

【讨论】:

  • 我刚刚尝试过,但它没有给我任何警报。它改为在浏览器上打印
  • 当我在数据类型中设置文本时它正在工作。所以从服务器发送到 .ajax 时我没有正确格式化 JSON?
  • 感谢您的回复。实际上,我已经解决了这个问题。我必须正确格式化 JSON。
【解决方案2】:
  1. 您是否检查过您发布的服务器/api 是否返回响应(使用邮递员)
  2. 您是否检查了请求的标头。您可能需要添加授权标头(公共 api 的常见做法)
  3. 您是否在请求中附加了 client_id、app_id 或 api_key
  4. 您是否验证了您的请求(基本上是第 2/3 点)

2 和 3 应该返回响应,无论哪种情况,我都会使用邮递员进行检查。如果邮递员至少应该返回一个响应。检查标头和 http 状态标头。如果您收到 200 响应,并且没有返回内容,则可能是路由或服务器配置存在问题

Ajax 示例 $(document).on('submit', '#searchdata', function (e) { e.preventDefault();

//Get form by id
var $form = #("#form_id");

//Form data
var formData = new formData($form);

$.ajax({
    url: 'http://localhost:300/edit/11', //path to api
    method: 'POST',    //Method to use (GET by default)
    data: formData,    //The data to be posted
    dataType: 'json',   //Expected reponse format
}).done(function(res){ 
    //Results here can contain an error - this is common for custom error types
    //Test for custom error assuming in the format res.error
    if( typeof res.error == 'undefined'){
        console.log(res)
    }else{
        //You have an error
    }
}).fail(function(err){
    console.log(err)
})

【讨论】:

  • 另外你用 node.js 做什么?快递?如果是表达你的回应应该是 response.json(myData)
  • 我正在使用 node.js,但我从服务器发送的 JSON 数据有问题。
  • 什么是 location.pathname?即实际网址
  • 不使用任何框架,现在我能够成功发送数据,即 JSON 数组,但循环没有在 ajax done 函数中执行
  • 这是一个框架可以让它变得非常简单的地方 - express 只需 route.('/path/', function(req, res, next){res.json(myData})
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
  • 2016-08-16
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 2018-09-18
  • 2011-10-26
相关资源
最近更新 更多