2011-09-12 53 views
9

我有一个简单的注册页面,验证用户是否已被占用。AjaxSetup永远不会执行成功功能

我对所有的ajax调用都使用ajaxSetup,并且由于某种原因,从不会调用“成功”。当我看着我的控制台(firebug)时,我可以看到一个成功的请求(代码200 OK,结果我得到了真或假)。

这里是我的代码:

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

什么是错我的代码? 谢谢

+5

只是为已发布的答案添加了一些说明,ajaxSetup方法设置了默认值。如果您为单个ajax请求提供成功方法,它将覆盖默认值。 –

回答

22

,因为你已经在你的$.ajax通话使用success

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

一切$.ajax将覆盖$.ajaxSetup

5

删除在$.ajax()内的success处理程序。

2

我认为你在你的ajax调用中指定成功函数时会覆盖它。尝试删除它,看看它是否从ajaxSetup调用。

2

$.ajaxSetup()是一种提供预先设定的默认设置的方法,适用于所有将来的ajax()调用,除非您在特定的ajax()调用中覆盖它们。当您在ajaxSetup()调用中以及在ajax()调用本身中定义成功处理程序时,只有其中一个成功处理程序会被调用。

所以,如果你想从ajaxSetup()调用成功处理程序,那么不要在ajax()调用中定义一个成功处理程序。如果您在ajax()呼叫中定义了一个,则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); 

,你只需覆盖每个对象功能

myAjaxSetup.success.apply(this, arguments); 

myAjaxSetup.error.apply(this, arguments); 

myAjaxSetup.anyfunctionyouwant.apply(this, arguments);