我有一个简单的注册页面,可以验证用户是否已被带走。
我对所有的ajax调用使用ajaxSetup,由于某种原因,永远不会调用“success”。当我看到我的控制台(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');
}
});
我的代码出了什么问题? 谢谢
答案 0 :(得分:22)
因为您已在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');
}
});
$.ajax
中的所有内容都将覆盖$.ajaxSetup
。
答案 1 :(得分:5)
删除success
内的$.ajax()
处理程序。
答案 2 :(得分:3)
$('#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);
答案 3 :(得分:2)
我认为你在ajax调用中指定成功函数时会覆盖它。尝试删除它,看看它是否从ajaxSetup中调用了一个。
答案 4 :(得分:2)
$.ajaxSetup()
是一种提供适用于所有未来ajax()
来电的预制默认设置的方法,除非您在该特定ajax()
来电中覆盖它们。在ajaxSetup()
调用和ajax()
调用本身中定义成功处理程序时,只会调用其中一个成功处理程序。
因此,如果您希望从ajaxSetup()
调用成功处理程序,则不要在ajax()
调用中定义一个。如果您在ajax()
调用中定义一个,那么ajaxSetup()
中的一个将不会被调用。
答案 5 :(得分:1)
您可以使用Global Ajax Event Handlers
$(document).ajaxSuccess(function() {
$( ".log" ).text( "Triggered ajaxSuccess handler." );
});