2017-02-25 3 views
0

で私はnewCompanyを追加するためのフォームを持って、私はそうのようなAJAXを使用してデータを送信します。 Ajax functionデータ保存二回MongoDBの

そして、ここではポストルートです: POST route in the back-end

そしてここでは、会社のモデルであります:

問題は、新しい会社を追加すると、データが2回挿入されたとき、最初の画像は画像名なしの12個のフィールドです! 2番目は空のオブジェクトです!ように: enter image description here

私は考えていないと私は私の心を失うだろう! お願いします!

+2

だけコピーしたコードを過ぎた後使用してくださいcmd/ctrl + k。ありがとう! – pudility

答えて

1

保存するとres.redirect('/company/create')と呼ばれ、HTTP302がクライアントに送信されます。その後、クライアントは同じルートを2回目にトリガーします。 $.ajax()リクエストが完了したら、クライアント側でリダイレクトを実行してみてください。

+1

あなたのコメントは理にかなっています。 'success:function(data、response){ window.location.href = response.redirect;' 'へのAjax呼び出しを編集し、 'res.redirect('/company/create ')を削除しました。ルート! でも動作しません! ! –

+0

と私は同じルートを2回リコールするのを避けるために家にリダイレクトを変更したとしても 'res.redirect( '/ home');'、データは完全なオブジェクトと空のオブジェクトを2回挿入しました! –

0

は/それが動作しない場合は、

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メソッドにあると思うので、私はそれをコメントアウトすると、バックエンドに送信された1つの空のオブジェクト! –

+0

上記質問のモデルのスクリーンショットがあります。 –

+0

app.postにconsole.log(req.body)を追加し、もう一度ajaxを送信します。そうすれば、ajaxがデータを2回送信していないことを確認できます。 –

0

私はあなたと同じ問題を抱えていましたが、Udemy.comに投稿されたあなたのリンクに続いてこの投稿に達しました。Q &私たちが従うコースの講義の37ページ。

この問題の解決策は、ボタンの 'submit'イベントNOTクリックイベントを処理します。私たちは、クリックイベントを処理したいとの応答でコードが実行されたように見えます。再びルートハンドラ)ここ

は単に「提出」と、この問題を解決する必要があると「をクリック」を置換、完全な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

しかし、私がネットワークタブをチェックした時、ポストは一度しか起こりません –

関連する問題