2011-09-12 36 views
9

Tôi có một trang đăng ký đơn giản xác nhận xem người dùng đã được sử dụng chưa.AjaxSetup không bao giờ thực hiện chức năng thành công

Tôi sử dụng ajaxSetup cho tất cả các cuộc gọi ajax của mình và vì một lý do nào đó "thành công" không bao giờ được gọi. Khi tôi nhìn vào giao diện điều khiển của tôi (firebug) tôi có thể thấy một yêu cầu thành công (mã 200 OK và tôi nhận được đúng hoặc sai là kết quả).

Dưới đây là mã của tôi:

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

Điều gì là sai với mã của tôi? Cảm ơn bạn

+5

Chỉ cần thêm một số làm rõ cho các câu trả lời đã được đăng, phương pháp ajaxSetup đặt mặc định. Nếu bạn cung cấp một phương thức thành công cho một yêu cầu ajax riêng lẻ, nó sẽ ghi đè lên mặc định. –

Trả lời

22

vì bạn đã sử dụng success trong $.ajax cuộc gọi của bạn

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

mọi thứ trong $.ajax sẽ ghi đè lên $.ajaxSetup.

5

Xóa trình xử lý success bên trong $.ajax().

2

Tôi nghĩ bạn đang ghi đè khi bạn chỉ định hàm thành công trong cuộc gọi ajax của mình. Hãy thử xóa nó và xem liệu nó có gọi là ajaxSetup hay không.

2

$.ajaxSetup() là phương tiện cung cấp các cài đặt mặc định, được áp dụng cho tất cả các cuộc gọi ajax() trong tương lai của bạn trừ khi bạn ghi đè chúng trong cuộc gọi ajax() cụ thể đó. Khi bạn định nghĩa một trình xử lý thành công trong cả cuộc gọi ajaxSetup() và cũng trong cuộc gọi ajax(), chỉ một trong những trình xử lý thành công đó sẽ được gọi.

Vì vậy, nếu bạn muốn người xử lý thành công được gọi từ ajaxSetup(), thì không xác định một trong cuộc gọi ajax(). Nếu bạn xác định một cuộc gọi trong cuộc gọi ajax() thì cuộc gọi từ ajaxSetup() sẽ không được gọi.

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

mỗi chức năng đối tượng mà bạn ghi đè đơn giản

myAjaxSetup.success.apply(this, arguments); 

hoặc

myAjaxSetup.error.apply(this, arguments); 

hoặc

myAjaxSetup.anyfunctionyouwant.apply(this, arguments); 
Các vấn đề liên quan