2011-09-12 13 views
9

Bir kullanıcının önceden alınmış olup olmadığını doğrulayan basit bir kayıt sayfam var.AjaxSetup asla başarı fonksiyonunu yürütmez

Tüm ajax çağrılarım için ajaxSetup kullanıyorum ve bir nedenden dolayı "başarı" hiçbir zaman çağrılmıyor. Konsoluma (firebug) baktığımda başarılı bir istek görüyorum (kod 200 Tamam ve sonuç olarak doğru veya yanlış olsun).

$('#checkValidUsername').click(function() { 
    // some basic validation like not empty etc... 
    $.ajax({ 
     type: "POST", 
     url: '/checkuser.php', 
     cache: false, 
     data: $("#form").serialize(), 
     dataType: 'json', 
     success: function(result) { 
      // do some actions 
     }, 
    }); 
} 

$.ajaxSetup({ 
    beforeSend: function() { 
     // show loading dialog // works 
    }, 
    complete: function(xhr, stat) { 
     // hide dialog // works 
    } 
    success: function(result,status,xhr) { 
     // not showing the alert 
     alert('success'); 
    } 
}); 

benim koduyla yanlış nedir:

İşte benim kod? Teşekkür ederiz

+5

AjaxSetup yöntemi, önceden gönderilen yanıtlara bazı açıklamalar eklemek için varsayılanları ayarlar. Bir ajax isteğine bir başarı yöntemi sağlarsanız, varsayılanı geçersiz kılar. –

cevap

22

Zaten $.ajax yılında

$('#checkValidUsername').click(function() { 
    // some basic validation like not empty etc... 
    $.ajax({ 
     type: "POST", 
     url: '/checkuser.php', 
     cache: false, 
     data: $("#form").serialize(), 
     dataType: 'json' 
/* 
     success: function(result) { 
      // do some actions 
     }, 
*/ 
    }); 
} 

$.ajaxSetup({ 
    beforeSend: function() { 
     // show loading dialog // works 
    }, 
    complete: function(xhr, stat) { 
     // hide dialog // works 
    } 
    success: function(result,status,xhr) { 
     // not showing the alert 
     alert('success'); 
    } 
}); 

herşey $.ajaxSetup geçersiz olacaktır $.ajax çağrısında success kullanarak çünkü.

5

işleyicisini $.ajax() içinden kaldırın.

2

Ajax çağrınızda başarı işlevini belirttiğinizde bunu geçersiz kıldığınızı düşünüyorum. Bunu kaldırmayı deneyin ve ajaxSetup'dan birini çağırıp aramadığını görün.

2

$.ajaxSetup(), o belirli ajax() aramasında bunları geçersiz kılmadıkça, tüm ileri ajax() çağrıları için geçerli olan önceden yapılmış, varsayılan ayarları sağlama aracıdır. Hem bir ajaxSetup() aramasında hem de ajax() aramasında bir başarı işleyicisini tanımladığınızda, bu başarı işleyicilerinden yalnızca biri aranır.

Bu nedenle, başarı işleyicisinin ajaxSetup() numaralı telefondan aranmasını istiyorsanız, ajax() numaralı aramayı tanımlamayın. ajax() aramasında bir tanesini tanımlarsanız, ajaxSetup() numaralı telefondan arama yapılmaz. sadece üzerine

2
$('#checkValidUsername').click(function() { 
    // some basic validation like not empty etc... 
    $.ajax({ 
     type: "POST", 
     url: '/checkuser.php', 
     cache: false, 
     data: $("#form").serialize(), 
     dataType: 'json', 
     success: function(result) { 
      myAjaxSetup.success.apply(this, arguments); 
      // do some actions 
     }, 
    }); 
} 

var myAjaxSetup = { 
    beforeSend: function() { 
     // show loading dialog // works 
    }, 
    complete: function(xhr, stat) { 
     // hide dialog // works 
    } 
    success: function(result,status,xhr) { 
     // not showing the alert 
     alert('success'); 
    } 
}; 
$.ajaxSetup(myAjaxSetup); 

her nesnenin işlevi

myAjaxSetup.success.apply(this, arguments); 

veya

myAjaxSetup.error.apply(this, arguments); 

veya

myAjaxSetup.anyfunctionyouwant.apply(this, arguments); 
İlgili konular