如何通过jQuery获得结果的正文和状态

时间:2016-07-23 17:56:18

标签: javascript jquery html node.js

我一直在使用NodeJS和Express开发一个简单的RESTful API。当后端完成并且可操作时,我的下一步是制作HTML表单以填充数据库并使用API​​。我决定使用jQuery提交数据是个不错的主意。 所以基本上我想从$.post获得我的应用程序后端在收到POST请求时生成的正文和状态。这是表单的脚本:

$('#addcube').submit(function(event){

      //Stop the default behaviour of the submit button
      event.preventDefault(); 

      //Get the input values 
      var $form = $(this),
          postData = {
            nombre: $form.find('input[name="nombre"]').val(),
            brand: $form.find('input[name="brand"]').val(),
            capas: $form.find('input[name="capas"]').val(),
            kind: $form.find('input[name="kind"]').val()
          },

          url = $form.attr('action');

      $.ajax({
        url: url,
        type: 'post',
        data: JSON.stringify(postData),
        contentType: "application/json",
        done: function(cube, textStatus, jqxhr){
          console.log(JSON.parse(cube));
        },
        fail: function(jqxhr, textStatus, errorThrown){
          console.log(errorThrown.msg);
        }
      });

    });

这是该帖子的后端路线:

app.post('/api/cube', cubeController.addCubo);

由此脚本控制:

module.exports.addCubo = function(req, res){
    var Cube = require('../models/cube');
    console.log('POST');
    try{
        console.log(req.body);

        var cubo = new Cube({
            nombre  : req.body.nombre,
            brand   : req.body.brand,
            capas       : req.body.capas,
            kind        : req.body.kind
        });

        cubo.save(function(err){
            if(!err){
                console.log('Nuevo cubo guardado.');
                res.send(JSON.stringify(cubo));
                res.status(200);
            }else{
                console.log('Error al guardar: '+err);
                res.send('{"status":"400","msg":"bad_request"}');
                res.status(400);
            }
        });
    }catch(err){
        res.send('{"status":"500","msg":"internal_server_error"}');
    }
};

1 个答案:

答案 0 :(得分:0)

body处不存在response属性,请使用。将$.post()类型设为json,或在JSON.parse()使用.done()。此外,如果发送error,请使用.fail()来记录消息

  var send = $.post(url, {
    nombre : name,
    brand  : marca,
    capas  : layers,
    kind   : tipo
  }, "json"); // set expected response type to `"json"`
  // Try to get the result
  send.done(function(cube, textStatus) {
    console.log(cube, textStatus)
  });
  // handle errors
  send.fail(function(jqxhr, textStatus, errorThrown) {
    console.log(textStatus, errorThrown, errorThrown.msg)
  });