2014-11-27 19 views
5

Mi sono guardato intorno e nessuno degli altri post simili mi ha aiutato. Ho creato un modulo basato su AJAx in Yii 2 e jQuery e sembra che invii il modulo due volte.Modulo Ajax che invia due volte con Yii 2

La mia forma:

$form = ActiveForm::begin([ 
    'id' => 'company_form', 
    'ajaxDataType' => 'json', 
    'ajaxParam' => 'ajax', 
    'enableClientValidation' => false 
]); 

Il mio codice JS:

$(document).ready(function() { 

    /* Processes the company signup request */ 

    $('#company_form').submit(function() { 
     signup('company'); 
     return false; 
    }); 

}) 

function signup(type) { 

    var url; 

    // Set file to get results from.. 

    switch (type) { 
     case 'company': 
      url = '/site/company-signup'; 
      break; 
     case 'client': 
      url = '/site/client-signup'; 
      break; 
    } 

    // Set parameters 
    var dataObject = $('#company_form').serialize(); 

    // Run request 

    getAjaxData(url, dataObject, 'POST', 'json') 

     .done(function(response) { 

      //......... 

     }) 

     .fail(function() { 
      //..... 
     }); 

    // End 

} 

Nel caso non lo standard submit essere fermato da me mettendo il return: false; nel codice javascript?

Perché viene inviato due volte?

Altre informazioni: Tuttavia, la cosa strana è che sembra accadere solo la prima volta; se premo di nuovo invio, si limita a inviare una sola volta; ma se ricarico la pagina e premo invio lo farò nuovamente due volte.

+0

vuol invia una richiesta Ajax due volte in Firebug? –

+0

@AliMasudianPour Sì, quando guardo la console la richiesta viene inviata due volte. Comunque la cosa strana è che sembra accadere solo la prima volta; se premo di nuovo invio, si limita a inviare una sola volta; ma se ricarico la pagina e premo invio lo farò nuovamente due volte. – Brett

risposta

7

Potrebbe essere necessario modificare il codice come di seguito:

$('#company_form').submit(function(e) { 
    e.preventDefault(); 
    e.stopImmediatePropagation(); 
    signup('company'); 
    return false; 
}); 

http://api.jquery.com/event.stoppropagation/

http://api.jquery.com/event.stopimmediatepropagation/

+1

Questo l'ha fatto! :) Molte grazie! – Brett

+0

@Brett Felice di sentirlo. Prego caro. –

+0

Ho lo stesso problema. Il modulo ha ''enableAjaxValidation' => true, 'validateOnSubmit' => true', ma il modulo viene comunque inviato due volte anche con il codice che hai fornito. Viene inviato due volte solo quando non ci sono errori. – jeesus