AjaxSetup从不执行成功函数

时间:2011-09-12 15:41:51

标签: jquery ajax

我有一个简单的注册页面,可以验证用户是否已被带走。

我对所有的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');
    }
});

我的代码出了什么问题? 谢谢

6 个答案:

答案 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." );
});