飞道的博客

解决JQuery中onload方法从iframe框架中取不到返回值的问题.

557人阅读  评论(0)

问题起因:

我在编写一个Django项目, 业务从后端到前端的时候, 取不到后端返回值的问题。

我是通过 iframe 框架 和 form 表单 伪造了 一个 ajax 请求发送给后端, 其中 iframe框架中判定了一个事件触发函数,如下:

<iframe id="ifm1" name="ifm1" style="display: none"></iframe>
    	<form id="fm1" action="AjaxFile.html" method="post" enctype="multipart/form-data" target="ifm1">
        {% csrf_token %}
        <input type="file" value="提交" multiple="" name="image" onchange="uploadfile3()">
    </form>

然后跳转到 uploadfile3() 这个函数, 我一直拿不到返回值的
问题代码最开始是这样的

function uploadfile3() {
   

        $("#ifm1").onload = function () {
               
            let content = JSON.parse($("#ifm1").contents().find("body").text());
            if (content.status) {
   
                let image = document.createElement("img");
                // 用上相对地址 /  /  /  / 这样的
                image.src = "/" + content.imagepath;
                image.height = 80;
                image.width = 80;
                $("#print_image").append(image);
            }

        }
        $("#fm1").submit();

    }

然后我试着让程序跑起来, 从后台我可以看到,

先查看后端响应:


没有问题

然后在浏览器调试, 发现 content = “” 是一个空的,

然后 console 一下


结果又有值,

而且我后端数据可以拿到, 文件也成功下载, 就是这个onload 拿不到返回值的问题


解决办法:

开始我还以为是一个错误导致的结果。


后面去设置这个头, 发现也不行, 然后我就去百度了一下 onload 这个方法,
这一查就出问题了, 我找了半天, 结果发现没有这个方法??
JQuery 中没有这个方法,

但是我在编译器又可以调用这个方法,

靠, 这就很无语了

然后还是使用 js document 对象,完成这个bug。

真就无语了, 不知道是我用错了这个 onload 还是没有这个方法, 不过改成document就ok了

也是搞了几下, 没什么头绪, 换一个方法就成了, 读者有更好的见解,或者办法可以在下面评论指出。


转载:https://blog.csdn.net/qq_45906219/article/details/110825593
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场