数据MongoDB中

数据MongoDB中

问题描述:

两次救了我有一个表单添加newCompany,我发送使用AJAX的数据,像这样: Ajax function数据MongoDB中

这里是后路线: POST route in the back-end

这里是公司的模式: enter image description here

问题是,当我添加新公司数据插入两次,第一个是没有图像名称的12个字段!第二个是空的物体!像这样: enter image description here

我不知道,我会失去理智! 请帮忙!

+2

请复制并过去,你的代码,然后使用cmd/ctrl + k。谢谢! – pudility

您在保存时调用res.redirect('/company/create'),这会将HTTP302发送到客户端。客户端然后再次触发相同的路线。在您的$.ajax()请求完成后,尝试在客户端执行重定向。

+1

您的评论是有道理的。 我编辑了Ajax呼叫到 '成功:函数(数据,响应){ window.location.href = response.redirect;' ,我删除了'res.redirect('/ company/create')'路线! 但它不工作! ! –

+0

,即使我改变了重定向到家中,以避免像res.redirect('/ home');'这样的数据两次回想相同的路由,也是插入两次完整对象和空对象的数据! –

看,这是因为你被重定向到公司的回应/创建

router.post('/company/create', function(req, res, next){ 

    var newCompany = new Company({ 
    name: req.body.name, 
    address: req.body.address, 
    city: req.body.city, 
    country: req.body.country, 
    . 
    . 
    . 
    . 
    }); 

    Company.save(newCompany, function(err, response){ 
     if(err){ 
     console.log(err); 
     } 

     res.location('/home'); 
     res.redirect('/home'); 
    }); 
}); 

如果它不工作,让我们看看你的模型。问题可能出在

+0

它也行不通,我认为错误是在ajax方法中,因为当我注释掉它时,只有一个空对象被发送到后端! –

+0

你会在上面的问题中找到模型的屏幕截图。 –

+0

在app.post中添加一个console.log(req.body),再次发送ajax。这样你确保ajax不会发送两次数据。 –

我和你有同样的问题,我在Udemy.com发布的链接后到达这个帖子Q &我们正在关注的课程第37讲。

这个问题的解决方案处理“提交”事件不要点击事件的按钮,它看起来像在回应我们的愿望得到执行处理单击事件的代码,然后它执行的自然行为(和执行再次路由处理)

这里是完整的validate.js文件,只需更换“咔哒”与“提交”,这应该解决的问题:

$(document).ready(function(){ 

    $('#register').on('submit',function(e){ 

     var name  = $.trim($('#name').val()); 
     var address = $.trim($('#address').val()); 
     var city  = $.trim($('#city').val()); 
     var country = $.trim($('#country').val()); 
     var sector = $.trim($('#sector').val()); 
     var website = $.trim($('#website').val()); 
     var img  = $.trim($('#upload-input').val()); 

     var isValid = true; 

     if(name == ''){ 

      isValid = false; 
      $('#errorMsg1').html('<div class="alert alert-danger">Company name can\'t be empty</div>'); 
     } 

     if(address == ''){ 

      isValid = false; 
      $('#errorMsg2').html('<div class="alert alert-danger">address can\'t be empty</div>'); 
     } 

     if(city == ''){ 

      isValid = false; 
      $('#errorMsg3').html('<div class="alert alert-danger">City can\t be empty</div>'); 
     } 

     if(country == ''){ 

      isValid = false; 
      $('#errorMsg4').html('<div class="alert alert-danger">Country can\'t be empty</div>'); 
     } 

     if(sector == ''){ 

      isValid = false; 
      $('#errorMsg5').html('<div class="alert alert-danger">Sector can\'t be empty</div>'); 
     } 

     if(country == ''){ 

      isValid = false; 
      $('#errorMsg6').html('<div class="alert alert-danger">Website can\'t be empty</div>'); 
     } 

     if(isValid == false){ 

      return false; 

     }else{ 

      var newCompany = { 
       name:  name, 
       address:  address, 
       city:  city, 
       country:  country, 
       sector:  sector, 
       website:  website, 
       img:   img 
      }; 

      $.ajax({ 
       url:   '/company/create', 
       type:  'POST', 
       data:  newCompany, 
       success:  function(){ 

        $('#name').val(''); 
        $('#address').val(''); 
        $('#city').val(''); 
        $('#country').val(''); 
        $('#sector').val(''); 
        $('#website').val(''); 
        $('#upload-input').val(''); 
       } 
      }); 

     } 

    }) 
}); 
+0

但当我检查网络标签发布只发生一次 –