2017-02-25 21 views
0

Ich habe ein Formular newCompany hinzuzufügen, ich Daten senden AJAX etwa so: Ajax functionDaten gespeichert Zweimal in MongoDB

Und hier ist die Post Route: POST route in the back-end

Und hier ist das Unternehmen Modell:

Das Problem ist, wenn ich neue Firma die Daten zweimal eingefügt, die erste ist 12 Felder ohne den Bildnamen !! und der zweite ist ein leeres Objekt! so: enter image description here

Ich habe keine Ahnung und ich werde meinen Verstand verlieren! Hilfe bitte!

+2

bitte einfach kopieren und Sie Code dann verwenden cmd/Strg + k. Vielen Dank! – pudility

Antwort

1

rufen Sie res.redirect('/company/create') beim Speichern, die HTTP302 an den Client sendet. Der Client löst dann die gleiche Route ein zweites Mal aus. Versuchen Sie, die Umleitung auf der Clientseite durchzuführen, nachdem Ihre Anforderung $.ajax() abgeschlossen wurde.

+1

Ihr Kommentar macht Sinn. Ich bearbeitet den Ajax Anruf zu 'Erfolg: Funktion (Daten, Antwort) { window.location.href = response.redirect;' und ich entfernte die 'res.redirect ('/ company/create')' von der Route! aber es funktioniert auch nicht! ! –

+0

und auch wenn ich die Umleitung auf das Heim geändert habe, um zu vermeiden, rufen Sie den gleichen Weg zweimal wie 'res.redirect ('/ home');', auch die Daten zweimal vollständig Objekt und leeres Objekt eingefügt! –

0

Schauen Sie dies, weil Sie Ihre Antwort auf Unternehmen umleiten/erstellen

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'); 
    }); 
}); 

Wenn es nicht funktioniert, lassen Sie uns Ihr Modell sehen. das Problem kann dort sein

+0

Es funktioniert auch nicht, ich denke, der Fehler ist in der Ajax-Methode, denn wenn ich es auskommentieren, nur ein leeres Objekt an das Back-End gesendet! –

+0

finden Sie in der obigen Frage einen Screenshot des Modells. –

+0

fügen Sie ein console.log (req.body) in der app.post hinzu, senden Sie die Ajax erneut. Auf diese Weise stellen Sie sicher, dass der Ajax keine Daten zweimal sendet. –

0

Ich hatte das gleiche Problem wie Sie und ich erreichte diesen Beitrag nach Ihrem Link auf Udemy.com Q & Ein Board auf Vortrag 37 des Kurses, den wir folgen.

Die Lösung für dieses Problem behandeln das "Senden" -Ereignis nicht klicken Ereignis für die Schaltfläche, es sieht aus wie der Code als Reaktion auf unseren Wunsch ausgeführt wird, Click-Ereignis zu behandeln, und dann führt es das natürliche Verhalten (und ausführen die Route-Handler wieder)

hier ist die komplette validate.js Datei, nur mit ‚Senden‘ das ‚Klick‘ ersetzen und dies sollte das Problem lösen:

$(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

, aber wenn ich überprüft das Netzwerk Tab Post geschieht nur einmal –

Verwandte Themen