javascript - 使用 AJAX 和 PHP 附加加载 gif 文件上传

标签 javascript php jquery html ajax

所以我有一个将图像文件上传到服务器并将它们的信息相应地保存在数据库中的方法。其中一些文件很大,上传需要时间,因此我需要在使用 ajax 上传时合并一个 loading.gif。我还使用相同的 AJAX 功能来防止在上传多张图片时刷新页面。

这是我正在使用的两个 JS 函数

function showLoading(){
document.getElementById("loading").style = "visibility: visible";
}
function hideLoading(){
document.getElementById("loading").style = "visibility: hidden";
}

这是 AJAX

$(function () {
        $('form#data').submit(function (e){
            e.preventDefault();
            e.stopImmediatePropagation();
            var formData = new FormData($(this)[0]);
            showLoading();
            $.ajax({
                type:'POST',
                url: 'upload.php',
                data: formData,
                async:false,
                cache:false,
                contentType: false,
                processData: false,
                success: function (returndata) {
                    $('#result').hideLoading().html(returndata);
                        alert("Data has been Uploaded: ");
                    }

            });
            return false;
        }); 
});

这是图片标签

<img id='loading' src='loading.gif' style='visibility: hidden;'>

当我点击提交时,我只能看到 loading.gif。它以前用来告诉我文件已上传并返回输入详细信息。此外,我还需要在文件上传后隐藏 loading.gif。

我哪里错了?

最佳答案

这个:

      $('#result').hideLoading().html(returndata);

您调用 hideloading() 就好像它是一个 JQuery 方法一样。不是,所以该代码是语法错误:调用未定义的方法。

你应该有

success: function() {
    hideLoading();
}

请注意,您的代码只是假设成功。如果由于某种原因上传失败,您仍然会显示正在加载的 gif。您应该将该隐藏调用移至 complete 处理程序,这样无论成功/失败,gif 都会在 ajax 调用完成时隐藏。

关于javascript - 使用 AJAX 和 PHP 附加加载 gif 文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39751933/

相关文章:

javascript - 查询mongoose数据库中的数据

javascript - 将 Highcharts 中的标记定位到自定义坐标

javascript - Ext JS 6 中与预加载关系一对一

php - PDO : Uncaught PDOException: could not find driver

php - 使用 PHP 查找两个不同 mysql 表中未链接的列

php - 使用 PHPExcel 只读取一个大 Excel 文件的一行

jquery - 如何将 jQuery 与 phantomjs 一起使用

javascript - 如何使用 .css() 应用 !important?

javascript - 如何设置弹出窗口大小

javascript - 设置全局 Moment 区域设置后,Moment-Timezone 使用默认区域设置