2011-09-12 54 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);