2014-11-27 14 views
5

Tôi đã xem xét và không có bài đăng tương tự nào khác đã giúp tôi. Tôi đã tạo một biểu mẫu dựa trên AJAx trong Yii 2jQuery và có vẻ như nó gửi biểu mẫu hai lần.Biểu mẫu Ajax gửi hai lần với Yii 2

hình thức của tôi:

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

mã JS của tôi:

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

} 

nên không chuẩn submit được ngừng lại bởi tôi đặt return: false; trong mã javascript?

Tại sao lại gửi hai lần?

Thông tin khác: Tuy nhiên, điều kỳ lạ là, điều đó chỉ xuất hiện lần đầu tiên; nếu tôi nhấn gửi lại, nó chỉ gửi một lần; nhưng nếu tôi tải lại trang và nhấn gửi, nó sẽ thực hiện lại hai lần.

+0

Liệu nó gửi yêu cầu ajax hai lần trong firebug? –

+0

@AliMasudianPour Có, khi tôi xem bảng điều khiển, yêu cầu được gửi hai lần. Tuy nhiên, điều kỳ lạ là, điều đó chỉ xuất hiện lần đầu tiên; nếu tôi nhấn gửi lại, nó chỉ gửi một lần; nhưng nếu tôi tải lại trang và nhấn gửi, nó sẽ thực hiện lại hai lần. – Brett

Trả lời

7

Bạn có thể cần phải thay đổi mã của bạn như dưới đây:

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

Điều đó đã làm được! :) Cảm ơn rất nhiều! – Brett

+0

@Brett Rất vui khi biết điều đó. Bạn thân mến. –

+0

Tôi có cùng một vấn đề. Biểu mẫu có ''enableAjaxValidation' => true ', validateOnSubmit' => true', nhưng vẫn biểu mẫu được gửi hai lần ngay cả với mã bạn đã cung cấp. Nó chỉ được gửi hai lần khi không có lỗi. – jeesus

Các vấn đề liên quan