【问题标题】:Delay in JQuery Function (Button Load State)JQuery 函数延迟(按钮加载状态)
【发布时间】:2015-08-29 02:46:29
【问题描述】:

我设置了表单验证,它将使用 Ajax 请求创建一些 Google 文档,然后在表单中的所有内容都经过验证后提交表单以在数据库中创建一个条目。

验证后要采取的操作由submitHandler 指定:

submitHandler: function(form) {
    $('#submitButton').button('loading');
    success1.show();
    error1.hide();
    var eName = $('#create_event').find('input[name="eventName"]').val();
    var eDate = $('#create_event').find('input[name="eventDate"]').val();
    var eType = $('#create_event').find('input[name="eventType"]').val();

    function getAgenda(eName, eDate, eType) {
        var result = null;
        var separator = "&";
        var scriptUrl = "http://example.net/libraries/upload.php?fType=agnd" + separator + "eName=" + eName + separator + "eDate=" + eDate + separator + "eType=" + eType;
        $.ajax({
            url: scriptUrl,
            type: 'get',
            dataType: 'html',
            async: false,
            success: function(data) {
                result = data;
            }
        });
        return result;
    }

    function getMin(eName, eDate, eType) {
        var result = null;
        var separator = "&";
        var scriptUrl = "http://example.net/libraries/upload.php?fType=min" + separator + "eName=" + eName + separator + "eDate=" + eDate + separator + "eType=" + eType;
        $.ajax({
            url: scriptUrl,
            type: 'get',
            dataType: 'html',
            async: false,
            success: function(data) {
                result = data;
            }
        });
        return result;
    }
    var agenda = $("<input>").attr("type", "hidden").attr("name", "agendaURL").val(getAgenda(eName, eDate, eType));
    $('#create_event').append($(agenda));
    var min = $("<input>").attr("type", "hidden").attr("name", "minURL").val(getMin(eName, eDate, eType));
    $('#create_event').append($(min));
    form[0].submit();
}

在表单提交之前,提交按钮不会进入“加载”状态。如果我删除了 Ajax 请求,那么加载状态会在单击时发生,而对于 Ajax 请求,它会非常延迟。

我在第二行将按钮设置为加载状态。

我的意思的一个例子可以在这里找到:http://getbootstrap.com/javascript/#buttons-stateful

任何帮助将不胜感激,提前感谢您的时间。

这是我的解决方法:

        submitHandler: function(form) {
          $('#submitButton').button('loading');
          console.log('Loading Button');
          $("#cancelButton").prop("disabled", true);
          console.log('Disable Button');
          success1.show();
          error1.hide();
          var eName = $('#create_event').find('input[name="eventName"]').val();
          var eDate = $('#create_event').find('input[name="eventDate"]').val();
          var eType = $('#create_event').find('select[name="eventType"]').val();
          var separator = "&";
          var agendaURL = "http://example.net/libraries/upload.php?fType=agnd" + separator + "eName=" + eName + separator + "eDate=" + eDate + separator + "eType=" + eType;
          var minURL = "http://example.net/libraries/upload.php?fType=min" + separator + "eName=" + eName + separator + "eDate=" + eDate + separator + "eType=" + eType;
          var agendaReturn = getAgenda(agendaURL);
          console.log('Called getAgenda');
          agendaReturn.success(function(data) {
            $('input[name="agendaURL"]').val(data);
            console.log('Assigned agendaURL hidden');
          });
          var minReturn = getMin(minURL);
          console.log('Called getMin');
          minReturn.success(function(data) {
            $('input[name="minURL"]').val(data);
            console.log('Assigned minURL hidden');
            submitForm();
            console.log('Form submit called');
          });

          function submitForm() {
            console.log('Form submitting');
            $('#create_event').unbind().submit();
          }

          function getAgenda(agendaURL) {
            return $.ajax({
              url: agendaURL,
              type: 'get',
              dataType: 'text',
              async: true,
            });
          }

          function getMin(minURL) {
            return $.ajax({
              url: minURL,
              type: 'get',
              dataType: 'text',
              async: true,
            });
          }
        }

【问题讨论】:

    标签: javascript jquery ajax forms button


    【解决方案1】:

    你试过了吗

      async:true;
    

    我认为应该可以。

    【讨论】:

    • 按钮的加载状态在点击时出现。但是,Ajax 请求似乎不起作用。当async 为false 时,Ajax 请求返回提交到数据库的链接。我看不到他们async:true;。
    • 所以我设置了async:true; 并注释掉了form[0].submit();。当async 是true 和false 时,这些文档似乎是在Google Drive 中创建的。唯一的区别是async:true;,隐藏输入的值不会出现在数据库中。也许是由于代码运行速度有多快?我目前正在尝试添加某种延迟/等待,看看是否会有所不同。
    猜你喜欢
    • 2013-12-06
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多