Soru jQuery ile form gönder


JQuery yoluyla bir gönderimi durdurmak ve önce sunucuda bir dosya olup olmadığını kontrol etmek istiyorum. Mevcut ise, istekte bulunmaz, mesaj göstermez ve isteği göndermez. Bu benim sahip olduğum şey:

$("#methodForm").submit(function(e){

    checkIndex('upload/segments.gen').done(function() {
        return true;
    }).fail(function () {
        e.preventDefault();
        alert("No index present!");
        return false;
    });
});

bu checkIndex():

function checkIndex(file){
    return $.ajax({
        url : file,
        type:'HEAD'
    });
}

Ne olur: Dosya sunucuda mevcut, ancak checkIndex başarısızlıkla döner. Önce uyarı açılır penceresini görüyorum ve devam ediyor ve posta isteğini sunucuya gönderir.

ben kullanıyorum checkIndex() beklendiği gibi çalıştığı diğer amaçlar için de bu yüzden hata gönderim rutininde bir yerde olduğundan eminim. Ama neyin yanlış olduğunu anlayamıyorum.


25
2018-02-14 18:46


Menşei


Ne yazık ki, bu sadece eşzamanlı AJAX isteği ile çalışacaktır. Düğmeyi devre dışı bırakmalı ve etkinleştirmelisiniz done geri aramak - Alexander


Cevaplar:


Zaman uyumsuz bir yönteme (ajax gibi) geri dönüş yapamazsınız. Bunun yerine, tümünü birlikte göndermeyi önleyin, ardından hazır olduğunuzda gönderin.

$("#methodForm").submit(function(e){
    e.preventDefault();
    var form = this;
    checkIndex('upload/segments.gen').done(function() {
        form.submit(); // submit bypassing the jQuery bound event
    }).fail(function () {
        alert("No index present!");
    });
});

50
2018-02-14 18:49



Bu benim için çalışmıyor. "TypeError: form.submit bir işlev değil" alıyorum ve $ (form) .submit () kullanırsam, gönderme işleyicisini tekrar tekrar çağırır. - Rooster242
ile bir öğeniz var id="submit", başka bir şeye değiştirin. - Kevin B


Gerçekten böyle çalışır, checkIndex eşzamansızdır, bu yüzden bir şey döndürdüğünde, form gönderilir ve iade ifadeleri de farklı bir kapsamdadır, daha fazlasını deneyin:

$("#methodForm").submit(function(e){
    e.preventDefault(); //prevent submit
    var self = this;
    checkIndex('upload/segments.gen').done(function() {
        self.submit(); //submit if ajax OK
    }).fail(function () {
        alert("No index present!");
   });
});

2
2018-02-14 18:48



@KevinB - Evet, değişti! - adeneo