【问题标题】:not able to show loading image before uploading上传前无法显示加载图片
【发布时间】:2016-06-06 16:58:26
【问题描述】:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html lang="en">
<head>
<title>Mahavir Prints</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet"
    href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script
    src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>

// javascript to upload images and showing loading image[$('#lm').show();] before upload

    <script type="text/javascript">
        $.ajaxSetup({
            cache: false
        });
        $(document).ready(function () {
            $("form#designDetailForm").submit(function (event) {
                event.preventDefault();
                //grab all form data  
                var formData = new FormData($(this)[0]);
                var x = true;
                if (designNo.value == "") {
                    alert("Please enter design no");
                    designNo.focus();
                    x = false;
                    return x;
                }

                if (designNo.value != "") {
                    var reg = /^\d+$/;

                    if (reg.test(designNo.value) == false) {
                        alert("Please enter a valid design number.Design number should  contain only numeric values.");
                        designNo.focus();
                        x = false;
                        return x;
                    }
                }

                if (designImage.value == "") {
                    alert("Please select a image for design to be uploaded.");
                    designImage.focus();
                    x = false;
                    return x;
                }

                if (x) {
                    $('#send').attr("disabled", true);
                    $('#lm').show();
                    $.ajax({
                        url: 'designDetails',
                        data: formData,
                        type: 'post',
                        async: false,
                        cache: false,
                        contentType: false,
                        processData: false,
                        success: function (data) {
                            var result = data;
                            if (result == 'Design number already exists for this category.' || result == 'File name already exists.Please change the name of file and then upload.') {
                            $('#failure').show();
                            $('#success').hide();
                            $('#failure').text(result);
                        } else {
                            $('#failure').hide();
                            $('#success').show();
                            $('#success').text(result);
                            $('#designNo').val('')
                            $('#designImage').val('');
                        }
                        $('#lm').hide();
                        $('#send').attr("disabled", false);
                     }
                   });
                }
            });
            $('#send').attr("disabled", false);
            $('#lm').hide();
        });
</script>

</head>
<body>

    <div class="container">
        <h2>Add new design</h2>
        <form role="form" name="designDetailForm" id="designDetailForm"
            method="post" enctype="multipart/form-data">

            <div class="form-group">
                <label for="designNo">Design No</label> <input type="text"
                    class="form-control" id="designNo" name="designNo"
                    placeholder="Design No">
            </div>

            <div class="form-group">
                <label for="category">Category</label> <select name="category"
                    id="dCategory" class="form-control">
                    <option value="1" selected="selected">Amercian Chiffon</option>
                    <option value="2">Nagma</option>
                    <option value="3">Soft Feel</option>
                    <option value="4">Sharmili</option>
                </select>
            </div>

            <div class="form-group">
                <label for="designPhoto">Design Photo</label> <input
                    class="form-control" type="file" id="designImage"
                    name="designImage" size="50" />
            </div>

            <button id="send" type="submit" class="btn btn-default" >Submit</button>
        </form>
        <div id=lm style='display: none; height: 100px; position: relative;'>
            <img src='img/loading.png' style='position: absolute; left: 0; top: 0; right: 0; bottom: 0; margin-top:-150px;' />
        </div>
         <div id="success" style="color: green;"></div>
         <div id="failure" style="color: red;" tabindex='1'></div>  
    </div>

</body>
</html>

我做错了什么?。我能够成功上传图片。上传之前我无法显示加载图片[$('#lm').show();]。如果在$('#lm').show(); 之后放置alert("test"),我可以看到加载图像。 但如果我删除 alert("test") 它不会显示我正在加载图像。

【问题讨论】:

    标签: javascript jquery html ajax twitter-bootstrap


    【解决方案1】:

    使用beforeSend

    if (x) {
      $.ajax({
        url: 'designDetails',
        data: formData,
        type: 'post',
        async: false,
        cache: false,
        contentType: false,
        processData: false,
        beforeSend: function() {
          $('#send').attr("disabled", true);
          $('#lm').show();
        }
        success: function(data) {
          var result = data;
          if (result == 'Design number already exists for this category.' || result == 'File name already exists.Please change the name of file and then upload.') {
            $('#failure').show();
            $('#success').hide();
            $('#failure').text(result);
    
          } else {
            $('#failure').hide();
            $('#success').show();
            $('#success').text(result);
            $('#designNo').val('')
            $('#designImage').val('');
          }
          $('#lm').hide();
          $('#send').attr("disabled", false);
    
        }
      });
    }
    

    【讨论】:

      【解决方案2】:

      这可能有助于改变 if 条件。

       $(document).ready(function () {
              $('#send').attr("disabled", false);
              $('#lm').hide();
              $("form#designDetailForm").submit(function (event) {
                  event.preventDefault();
                  //grab all form data  
                  var formData = new FormData($(this)[0]);
                  var x = true;
                  if (designNo.value == "") {
                      alert("Please enter design no");
                      designNo.focus();
                      x = false;
                      return x;
                  }
      
                  if (designNo.value != "") {
                      var reg = /^\d+$/;
      
                      if (reg.test(designNo.value) == false) {
                          alert("Please enter a valid design number.Design number should  contain only numeric values.");
                          designNo.focus();
                          x = false;
                          return x;
                      }
                  }
      
                  if (designImage.value == "") {
                      alert("Please select a image for design to be uploaded.");
                      designImage.focus();
                      x = false;
                      return x;
                  }
      
                  if (x) {
                      $('#send').attr("disabled", true);
                      $('#lm').show();
                      $.ajax({
                          url: 'designDetails',
                          data: formData,
                          type: 'post',
                          async: false,
                          cache: false,
                          contentType: false,
                          processData: false,
                          success: function (data) {
                              var result = data;
                              if (result == 'Design number already exists for this category.' || result == 'File name already exists.Please change the name of file and then upload.') {
                              $('#failure').show();
                              $('#success').hide();
                              $('#failure').text(result);
                          } else {
                              $('#failure').hide();
                              $('#success').show();
                              $('#success').text(result);
                              $('#designNo').val('')
                              $('#designImage').val('');
                          }
                          $('#lm').hide();
                          $('#send').attr("disabled", false);
                       }
                     });
                  }
              });
          });
      

      【讨论】:

      • 你不能放置 $('#lm').show();正如你所展示的。它显示错误。
      • 哦,是的@Ankit。感谢您的审查。 “ $('#lm').show(); ”应该在 Ajax 调用的顶部,成功后您可以隐藏图像。我修改了答案
      • 这是我在问题中提到的,但它不起作用。请正确检查问题。
      • 移动你的默认 $('#lm').hide();到顶部,即在提交功能之前,并尝试一次。我已经编辑了答案。
      • @Ankit 你也可以使用完整的 ajax 事件。请参考api.jquery.com/Ajax_Events。在完成事件中隐藏图像,它可能会起作用。
      【解决方案3】:

      我自己找到了解决办法。

      在 ajax 调用中删除 async:false 为我完成了这项工作。 感谢大家的帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-19
        • 2022-01-17
        • 2014-07-25
        • 2013-01-02
        相关资源
        最近更新 更多