jQuery 文件上传。无法读取 null 的属性“innerHTML”

Posted

技术标签:

【中文标题】jQuery 文件上传。无法读取 null 的属性“innerHTML”【英文标题】:jQuery File Upload. Cannot read property 'innerHTML' of null 【发布时间】:2018-06-09 17:10:45 【问题描述】:

我正在尝试在我的项目中使用 blueimp 的 jQuery File Upload 插件。这在 Basic Plus 版本中完美运行,我可以在服务器上加载文件,但是当我尝试使用 Basic Plus UI (link) 时出现错误:

tmpl.min.js:1 Uncaught TypeError: Cannot read property 'innerhtml' of null
    at Function.n.load (http://127.0.0.1:8000/static/cp/file_upload/tmpl.min.js:1:324)
    at n (http://127.0.0.1:8000/static/cp/file_upload/tmpl.min.js:1:208)
    at n (http://127.0.0.1:8000/static/cp/file_upload/tmpl.min.js:1:204)
    at $.(anonymous function).(anonymous function)._initTemplates (http://127.0.0.1:8000/static/cp/file_upload/jquery.fileupload-ui.js:661:46)
    at $.(anonymous function).(anonymous function)._initTemplates (http://127.0.0.1:8000/static/cp/file_upload/vendor/jquery.ui.widget.js:127:25)
    at $.(anonymous function).(anonymous function)._initSpecialOptions (http://127.0.0.1:8000/static/cp/file_upload/jquery.fileupload-ui.js:681:18)
    at $.(anonymous function).(anonymous function)._initSpecialOptions (http://127.0.0.1:8000/static/cp/file_upload/vendor/jquery.ui.widget.js:127:25)
    at $.(anonymous function).(anonymous function)._create (http://127.0.0.1:8000/static/cp/file_upload/jquery.fileupload.js:1390:18)
    at $.(anonymous function).(anonymous function)._create (http://127.0.0.1:8000/static/cp/file_upload/vendor/jquery.ui.widget.js:127:25)
    at $.(anonymous function).(anonymous function)._super (http://127.0.0.1:8000/static/cp/file_upload/vendor/jquery.ui.widget.js:114:36)

这是我项目中 js 需求的顺序:

vendor/jquery.ui.widget.js
javascript-Templates/js/tmpl.min.js
JavaScript-Load-Image/js/load-image.all.min.js
canvas-to-blob.min.js
jquery.iframe-transport.js
jquery.fileupload.js
jquery.fileupload-process.js
jquery.fileupload-image.js
jquery.fileupload-validate.js
jquery.fileupload-ui.js

实际上,即使我从示例中复制/粘贴源代码,我也会收到此错误消息。

编辑:

这里是html代码:

<input id="fileupload" type="file" name="files[]" class="form-control" multiple>
<div id="files" class="files"></div>

javascript(复制自 blueimp 示例):

$(function () 
    'use strict';

    // Initialize the jQuery File Upload widget:
    $('#fileupload').fileupload(
        // Uncomment the following to send cross-domain cookies:
        //xhrFields: withCredentials: true,
        url: '% url 'add_request' %',
    );

    // Enable iframe cross-domain access via redirect option:
    $('#fileupload').fileupload(
        'option',
        'redirect',
        window.location.href.replace(
            /\/[^\/]*$/,
            '/cors/result.html?%s'
        )
    );

    if (window.location.hostname === 'blueimp.github.io') 
        // Demo settings:
        $('#fileupload').fileupload('option', 
            url: '//jquery-file-upload.appspot.com/',
            disableImageResize: /android(?!.*Chrome)|Opera/
                .test(window.navigator.userAgent),
            maxFileSize: 999000,
            acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i
        );
        // Upload server status check for browsers with CORS support:
        if ($.support.cors) 
            $.ajax(
                url: '//jquery-file-upload.appspot.com/',
                type: 'HEAD'
            ).fail(function () 
                $('<div class="alert alert-danger"/>')
                    .text('Upload server currently unavailable - ' +
                            new Date())
                    .appendTo('#fileupload');
            );
        
     else 
        // Load existing files:
        $('#fileupload').addClass('fileupload-processing');
        $.ajax(
            // Uncomment the following to send cross-domain cookies:
            //xhrFields: withCredentials: true,
            url: $('#fileupload').fileupload('option', 'url'),
            dataType: 'json',
            context: $('#fileupload')[0]
        ).always(function () 
            $(this).removeClass('fileupload-processing');
        ).done(function (result) 
            $(this).fileupload('option', 'done')
                .call(this, $.Event('done'), result: result);
        );
    

);

【问题讨论】:

发布您正在使用的相关代码本身 @a-wolff 刚刚编辑了我的帖子 @umaru 你在哪里使用过'innerHTML'? @nitin-dhomse 这是来自 JavaScript-Templates/js/tmpl.min.js github.com/blueimp/JavaScript-Templates 【参考方案1】:

解决了。问题不在javascript中。我在模板中使用 django 标签。所以我不得不将 JavaScript-Templates 标签放入 % verbatim % django 标签中。 谢谢大家。

【讨论】:

以上是关于jQuery 文件上传。无法读取 null 的属性“innerHTML”的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的类型错误:无法使用 jQuery 验证读取未定义的属性“调用”

无法读取 null 的属性“getElementsByClassName”

无法在 ejs 文件 (node.js) 中读取 null 的属性“名称”

未捕获的类型错误:无法读取 null 的属性“长度”(maps.js 第 85 和 541 行)

浏览器链接:调用返回值回调失败:TypeError:无法读取 null 的属性“文件”

Firebase 存储上传错误:无法读取未定义的属性“子”