2011-09-12 19 views
9

Tengo una página de registro simple que valida si un usuario ya está ocupado.AjaxSetup nunca ejecuta la función de éxito

Uso ajaxSetup para todas mis llamadas ajax y por alguna razón el "éxito" nunca se llama. Cuando miro mi consola (firebug) puedo ver una solicitud exitosa (el código 200 OK y el resultado es verdadero o falso).

Aquí está mi código:

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

Qué hay de malo en mi código? Gracias

+5

Solo para añadir algunas aclaraciones a las respuestas ya publicadas, el método ajaxSetup establece los valores predeterminados. Si proporciona un método de éxito para una solicitud individual de ajax, anulará el valor predeterminado. –

Respuesta

22

porque ya se está utilizando en su llamada success$.ajax

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

todo en $.ajax anulará el $.ajaxSetup.

5

Quite el controlador success dentro de $.ajax().

2

Creo que está anulándolo cuando especifica la función de éxito en su llamada ajax. Intente eliminar eso y vea si llama al de ajaxSetup.

2

$.ajaxSetup() es un medio para proporcionar configuraciones prefabricadas predeterminadas que se aplican a todas sus futuras llamadas ajax() a menos que las anule en esa llamada específica ajax(). Cuando define un controlador de éxito en la llamada ajaxSetup() y también en la llamada ajax(), solo se llamará a uno de esos manejadores de éxito.

Por lo tanto, si desea que se llame al controlador de éxito desde ajaxSetup(), no defina uno en la llamada ajax(). Si define uno en la llamada ajax(), no se llamará al de ajaxSetup().

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

cada función objeto que se puede sobreescribir simplemente

myAjaxSetup.success.apply(this, arguments); 

o

myAjaxSetup.error.apply(this, arguments); 

o

myAjaxSetup.anyfunctionyouwant.apply(this, arguments); 
Cuestiones relacionadas