Реализация загрузки и предварительного просмотра изображений jQuery Ajax обновляет страницу, которая не ожидается

#javascript #jquery #ajax #asp.net-mvc

#javascript #jquery #ajax #asp.net-mvc

Вопрос:

Я пытаюсь загрузить и просмотреть изображение с помощью jQuery Ajax. Но она перезагружает страницу всякий раз, когда я выбираю только файл изображения. Одна вещь, которую я заметил здесь, заключается в том, что она не перезагружает страницу, если я выбираю файлы, отличные от файла изображения. Я проверил решение онлайн и добавил все возможные решения, предложенные для этого, т. е. contentType: false и event.preventDefault(); , но оно по-прежнему работает не так, как ожидалось

HTML-код выглядит следующим образом

 <form id="createCategory">
    <label>Name</label>
    <input name="Name" />
    <br />
    <label>Description</label>
    <input name="Description" />
    <br />
    <label>Image</label>
    <input id="inpImageURL" name="ImageURL" type="hidden" />
    <input id="inpImageUpload" name="Image" type="file"/>
    <div class="thumb">
        <img id="imgUploadImage" src="#" alt="your image" />
    </div>
    <br />
    <button type="submit">Save</button>
</form>
  

Код jQuery выглядит следующим образом

 $("#inpImageUpload").change(function (event) {
        debugger;
        event.preventDefault();

        var element = this;

        var formData = new FormData();
        var totalFiles = element.files.length;
        for (var i = 0; i < totalFiles; i  ) {
            var file = element.files[i];
            formData.append("Photo", file);
        }

         $.ajax({
             type: 'POST',
             url: '/Shared/UploadImage',
             dataType: 'json',
             data: formData,
             processData: false,
             contentType: false

         })
        .done(function (response) {
            debugger;
            alert('ajax was called success');
            //console.log(response);
            //if (response.Success) {
            //    //$("#imgUploadImage").attr("src", response.inpImageURL);
            //    //$("#inpImageURL").val(response.inpImageURL);
            //    alert('ajax was called success');
            //}
        })
        .fail(function (XMLHttpRequest, txtStatus, errorThrown) {
            alert("Failure AJAX Call");
        });



    });
  

ASP.Net Ниже приведен код MVC

 public class SharedController : Controller
    {
        public JsonResult UploadImage()
        {
            JsonResult result = new JsonResult();
            result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
            try
            {
                var file = Request.Files[0];
                var fileName = Guid.NewGuid()   Path.GetExtension(file.FileName);
                var path = Path.Combine(Server.MapPath("~/Content/images"), fileName);
                file.SaveAs(path);
                result.Data = new { Success = true, ImageURL = string.Format("/Content/images/{0}", fileName) };
            }
            catch (Exception ex)
            {

                result.Data = new { Success = false, Message = ex.Message };
            }

            return resu<
        }
    }
  

Комментарии:

1. не уверен, что понимаю ваш вопрос, поэтому, когда вы выбираете изображение, оно перезагружает страницу, и все введенные вами данные теряются? Также что это означает под it is not reloading the page if I am choosing files other than image file тем, что вы выбрали?

2. @HastaTamang Да, это перезагрузка страницы, когда я выбираю файл изображения (т. Е. jpg,.png и т.д.), Который не ожидается. Я не хочу перезагружать страницу. В настоящее время я разрешил выбирать все файлы. В этом случае, когда я выбираю файлы, отличные от файла изображения, страница не перезагружается. Здесь я выбираю файл .pdf.

3. @HastaTamang Это происходит после предупреждающего сообщения, которое присутствует в . выполнена часть ajax.

4. Я попробовал ваш код и загрузил изображения в формате jpg / png, он работает без перезагрузки страницы. Я надеюсь, что дублирующее оповещение в функции done также прокомментировано в вашем коде?

5. @HastaTamang Да, дублирующийся код предупреждения прокомментирован.