【问题标题】:AjaxSetup never execute the success functionAjaxSetup 从不执行成功函数
【发布时间】:2011-09-12 15:41:50
【问题描述】:

我有一个简单的注册页面,用于验证用户是否已被占用。

我对所有的 ajax 调用都使用 ajaxSetup,并且由于某种原因,从未调用过“成功”。当我查看我的控制台(萤火虫)时,我可以看到一个成功的请求(代码 200 OK,结果是 true 或 false)。

这是我的代码:

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

我的代码有什么问题? 谢谢

【问题讨论】:

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

标签: jquery ajax


【解决方案1】:

因为您已经在 $.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。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案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);
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          因此,如果您希望从ajaxSetup() 调用成功处理程序,则不要在ajax() 调用中定义一个。如果你在ajax() 调用中定义了一个,那么来自ajaxSetup() 的那个将不会被调用。

          【讨论】:

            【解决方案6】:

            您可以使用Global Ajax Event Handlers

            $(document).ajaxSuccess(function() {
              $( ".log" ).text( "Triggered ajaxSuccess handler." );
            });
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-04-28
              • 2015-06-13
              • 2019-04-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多