$.ajaxFileUpload上传文件出现错误...问题总结

2023-11-05

1、 加载报错: ajaxfileupload.js:1 Uncaught ReferenceError: jQuery is not defined
上传报错: Uncaught TypeError: $.ajaxFileUpload is not a function
原因: jquery.js,ajaxfileupload.js加载顺序不正确,应先加载 jquery.js,再加载ajaxfileupload.js

<script type="text/javascript" src="jquery.js"></script>
<script src="ajaxfileupload.js" type="text/javascript"></script>

2、 运行时报错: jQuery.handleError is not a function
原因: ajaxfileupload.js插件中使用低版本jquery,版本1.4.2之前的版本才有handlerError方法,例子里使用的Jquery是1.2的,需手动添加该方法

handleError: function( s, xhr, status, e )      {
       // If a local callback was specified, fire it
       if ( s.error ) {
           s.error.call( s.context || s, xhr, status, e );
       }
       // Fire the global callback
       if ( s.global ) {
           (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
       }
   }

3、 执行成功后,始终指向error方法处理,无法执行sucess方法
原因: 这个是由于ajaxfileupload.js 处理返回data的时候,没有考虑后台返回的是字符串的问题,data数据被加了pre标签了。。。

 uploadHttpData: function (r, type) {        
     var data = !type;  
     data = type == "xml" || data ? r.responseXML : r.responseText;        // If the type is "script", eval it in global context  
     if (type == "script")  
         jQuery.globalEval(data);        // Get the JavaScript object, if JSON is used.  
     if (type == "json")  
         data=data.replace("<pre>","").replace("</pre>","");   //如果返回的是字符串(JSON格式字符串),去除pre标签
         data=eval('(' + data+ ')');        // evaluate scripts within html  
         return data;
     if (type == "html")  
         jQuery("<div>").html(data).evalScripts();        
     return data;          
}

4、不报错,但是图片上传不成功,显示到ajaxfileupload.js中 jQuery(form).submit();//提交form表单 这里
原因: 后台处理文件上传时,指定的存储路径不正确
示例:
file.blade.php

<script type="text/javascript" src="jquery.js"></script>
<script src="ajaxfileupload.js" type="text/javascript"></script>
缩略图:<input type="file" id="file_upload" name="file_upload" onchange="savethumb('thumb')" />
<input type="hidden"  id="thumb"  name="thumb" />   
<img src="" id="thumb_img" style="width:150px;height:150px;" />

ajaxfileupload.js

jQuery.extend({  
    createUploadIframe: function (id, uri) {//id为当前系统时间字符串,uri是外部传入的json对象的一个参数  
        //create frame  
        var frameId = 'jUploadFrame' + id; //给iframe添加一个独一无二的id  
        var iframeHtml = '<iframe id="' + frameId + '" name="' + frameId + '" style="position:absolute; top:-9999px; left:-9999px"'; //创建iframe元素  
        if (window.ActiveXObject) {//判断浏览器是否支持ActiveX控件  
            if (typeof uri == 'boolean') {  
                iframeHtml += ' src="' + 'javascript:false' + '"';  
            }            else if (typeof uri == 'string') {  
                iframeHtml += ' src="' + uri + '"';  
            }  
        }  
        iframeHtml += ' />';  
        jQuery(iframeHtml).appendTo(document.body); //将动态iframe追加到body中  
        return jQuery('#' + frameId).get(0); //返回iframe对象  
    },  
    createUploadForm: function (id, fileElementId, data) {//id为当前系统时间字符串,fileElementId为页面<input type='file' />的id,data的值需要根据传入json的键来决定  
        //create form      
        var formId = 'jUploadForm' + id; //给form添加一个独一无二的id  
        var fileId = 'jUploadFile' + id; //给<input type='file' />添加一个独一无二的id  
        var form = jQuery('<form  action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data" ></form>'); //创建form元素  
        if (data) {//通常为false  
            for (var i in data) {  
                if (data[i] instanceof Array) {
                    for ( var j in data[i]) {
                        jQuery('<input type="checkbox" name="'+i+'" value="'+data[i][j]+'" checked />').appendTo(form);
                    }
                } else {
                    jQuery('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form); //根据data的内容,创建隐藏域,这部分我还不知道是什么时候用到。估计是传入json的时候,如果默认传一些参数的话要用到。  
                }
            }  
        }
        if (fileElementId instanceof Array) {
            for (var i = 0; i < fileElementId.length; i++) {
                var oldElement = jQuery('#' + fileElementId[i]); //得到页面中的<input type='file' />对象  
                var newElement = jQuery(oldElement).clone(); //克隆页面中的<input type='file' />对象  
                jQuery(oldElement).attr('id', fileElementId[i]); //修改原对象的id  
                jQuery(oldElement).before(newElement); //在原对象前插入克隆对象  
                jQuery(oldElement).appendTo(form); //把原
            }
        } else {
            var oldElement = jQuery('#' + fileElementId); //得到页面中的<input type='file' />对象  
            var newElement = jQuery(oldElement).clone(); //克隆页面中的<input type='file' />对象  
            jQuery(oldElement).attr('id', fileId); //修改原对象的id  
            jQuery(oldElement).before(newElement); //在原对象前插入克隆对象  
            jQuery(oldElement).appendTo(form); //把原对象插入到动态form的结尾处  
        }

        //set attributes  
        jQuery(form).css('position', 'absolute'); //给动态form添加样式,使其浮动起来,  
        jQuery(form).css('top', '-1200px');  
        jQuery(form).css('left', '-1200px');  
        jQuery(form).appendTo('body'); //把动态form插入到body中  
        return form;  
    },  
    ajaxFileUpload: function (s) {//这里s是个json对象,传入一些ajax的参数  
        // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout          
        s = jQuery.extend({}, jQuery.ajaxSettings, s); //此时的s对象是由jQuery.ajaxSettings和原s对象扩展后的对象  
        var id = new Date().getTime(); //取当前系统时间,目的是得到一个独一无二的数字  
        var form = jQuery.createUploadForm(id, s.fileElementId, (typeof (s.data) == 'undefined' ? false : s.data)); //创建动态form  
        var io = jQuery.createUploadIframe(id, s.secureuri); //创建动态iframe  
        var frameId = 'jUploadFrame' + id; //动态iframe的id  
        var formId = 'jUploadForm' + id; //动态form的id  
        // Watch for a new set of requests  
        if (s.global && !jQuery.active++) {//当jQuery开始一个ajax请求时发生  
            jQuery.event.trigger("ajaxStart"); //触发ajaxStart方法  
        }        var requestDone = false; //请求完成标志  
        // Create the request object  
        var xml = {};        if (s.global)  
            jQuery.event.trigger("ajaxSend", [xml, s]); //触发ajaxSend方法  
        // Wait for a response to come back  
        var uploadCallback = function (isTimeout) {//回调函数  
            var io = document.getElementById(frameId); //得到iframe对象  
            try {                if (io.contentWindow) {//动态iframe所在窗口对象是否存在  
                    xml.responseText = io.contentWindow.document.body ? io.contentWindow.document.body.innerHTML : null;  
                    xml.responseXML = io.contentWindow.document.XMLDocument ? io.contentWindow.document.XMLDocument : io.contentWindow.document;  
                } else if (io.contentDocument) {//动态iframe的文档对象是否存在  
                    xml.responseText = io.contentDocument.document.body ? io.contentDocument.document.body.innerHTML : null;  
                    xml.responseXML = io.contentDocument.document.XMLDocument ? io.contentDocument.document.XMLDocument : io.contentDocument.document;  
                }  
            } catch (e) {  
                jQuery.handleError(s, xml, null, e);  
            }            if (xml || isTimeout == "timeout") {//xml变量被赋值或者isTimeout == "timeout"都表示请求发出,并且有响应  
                requestDone = true; //请求完成  
                var status;                try {  
                    status = isTimeout != "timeout" ? "success" : "error"; //如果不是“超时”,表示请求成功  
                    // Make sure that the request was successful or notmodified  
                    if (status != "error") {                        // process the data (runs the xml through httpData regardless of callback)  
                        var data = jQuery.uploadHttpData(xml, s.dataType); //根据传送的type类型,返回json对象,此时返回的data就是后台操作后的返回结果  
                        // If a local callback was specified, fire it and pass it the data  
                        if (s.success)  
                            s.success(data, status); //执行上传成功的操作  
                        // Fire the global callback  
                        if (s.global)  
                            jQuery.event.trigger("ajaxSuccess", [xml, s]);  
                    } else  
                        jQuery.handleError(s, xml, status);  
                } catch (e) {  
                    status = "error";  
                    jQuery.handleError(s, xml, status, e);  
                }                // The request was completed  
                if (s.global)  
                    jQuery.event.trigger("ajaxComplete", [xml, s]);                // Handle the global AJAX counter  
                if (s.global && ! --jQuery.active)  
                    jQuery.event.trigger("ajaxStop");                // Process result  
                if (s.complete)  
                    s.complete(xml, status);  
                jQuery(io).unbind();//移除iframe的事件处理程序  
                setTimeout(function () {//设置超时时间  
                    try {  
                        jQuery(io).remove();//移除动态iframe  
                        jQuery(form).remove();//移除动态form  
                    } catch (e) {  
                        jQuery.handleError(s, xml, null, e);  
                    }  
                }, 100)  
                xml = null  
            }  
        }        // Timeout checker  
        if (s.timeout > 0) {//超时检测  
            setTimeout(function () {                // Check to see if the request is still happening  
                if (!requestDone) uploadCallback("timeout");//如果请求仍未完成,就发送超时信号  
            }, s.timeout);  
        }        try {            var form = jQuery('#' + formId);  
            jQuery(form).attr('action', s.url);//传入的ajax页面导向url  
            jQuery(form).attr('method', 'POST');//设置提交表单方式  
            jQuery(form).attr('target', frameId);//返回的目标iframe,就是创建的动态iframe  
            if (form.encoding) {//选择编码方式  
                jQuery(form).attr('encoding', 'multipart/form-data');  
            }            else {  
                jQuery(form).attr('enctype', 'multipart/form-data');  
            }  
            jQuery(form).submit();//提交form表单  
        } catch (e) {  
            jQuery.handleError(s, xml, null, e);  
        }  
        jQuery('#' + frameId).load(uploadCallback); //ajax 请求从服务器加载数据,同时传入回调函数  
        return { abort: function () { } };  
    },  
    uploadHttpData: function (r, type) {        var data = !type;  
        data = type == "xml" || data ? r.responseXML : r.responseText;        // If the type is "script", eval it in global context  
        if (type == "script")  
            jQuery.globalEval(data);        // Get the JavaScript object, if JSON is used.  
        if (type == "json")  
            data=data.replace("<pre>","").replace("</pre>","");//除去字符串中的pre标签
            data=eval('(' + data+ ')');        // evaluate scripts within html  
            return data;
        if (type == "html")  
            jQuery("<div>").html(data).evalScripts();        return data;  
    },
    //自添加方法handleError
    handleError: function( s, xhr, status, e )      {
        // If a local callback was specified, fire it
        if ( s.error ) {
            s.error.call( s.context || s, xhr, status, e );
        }
        // Fire the global callback
        if ( s.global ) {
            (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
        }
    }
}) 

fileController.php

/*
* 上传图片
 */
public function postUpload(){
    if(!isset($_FILES['file_upload'])){
        echo json_encode(array('err'=>"找不到该文件"));
        die;
    }else{
        $news_filename = $_FILES['file_upload']['name'];
        $news_fileext = get_filetype($news_filename);
        $middle_name = date('YmdHis',time()).rand(1000,9999);
        if(!in_array($news_fileext, array('jpg', 'gif', 'png'))){
            echo json_encode(array('err' => '请上传JPG、GIF、PNG格式图片文件'));
            die;
        }
        $FileName = $middle_name.'.'.$news_fileext;
        $Path = "/uploadfile/images/".date('Ymd',time());
        $imgPath = ROOT_DIR.'/'.$Path;//***公共文件夹访问目录***
        if(!file_exists($imgPath))mkdirs($imgPath);
        $news_filesize = filesize($_FILES['file_upload']['tmp_name']);
        if($news_filesize>20*1024*1024){
            echo json_encode(array('err'=>'文件过大'));die;
        }
        move_uploaded_file($_FILES['file_upload']['tmp_name'], $imgPath.DS.$FileName);
        $json = array('filepath' => $Path.'/'.$FileName);
        echo json_encode($json);
        die;
    }
}

示例效果如图:
这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

$.ajaxFileUpload上传文件出现错误...问题总结 的相关文章

  • 如何在 drop 事件 jquery 上获取已删除项目的 id

    当我将某些东西放到 jquery droppable 时 我想获取删除的项目的 id 当我这样做时 here droppable tolerance fit accept one drop function id this attr id
  • 如何从脚本中创建新的 Joomla 用户帐户?

    我们正在为 Joomla 创建一个 XML API 允许合作伙伴网站在我们的网站上为其用户创建新帐户 我们已经创建了一个独立的 PHP 脚本来处理和验证 API 请求 但现在我们需要实际创建新帐户 我们最初只想进行 CURL 调用来提交注册
  • PHP 的脚手架 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 PHP 中有什么东西可以像 Rails 一样创建基本的脚手架吗 编辑 我需要一些东西来快速原型化 一些框架比如Symfony http www sym
  • 如何按多个项目搜索/过滤列表?

    我正在寻找一个示例 或者可能是一个关于通过在文本框中输入的多个项目来过滤 搜索项目列表的方法的一点提示 假设我有一个列表 ul li Coffee li li Tea li li Milk li li Water li li Juice l
  • Laravel 从 API 响应中删除标头值

    Laravel 应用程序版本 5 6 我希望从 API 响应中显示的 Cache Control 标头中删除 private 值 我有一个中间件添加 无缓存 和 无存储 值 response next request response gt
  • 从 php 到 JavaScript 的数组

    我正在尝试使用 json 将数组列表从 php 传输到 javascript 但它不起作用 JS ajax url getProfilePhotos php type post post or get method data if you
  • 将 JSON 发布到 Python CGI

    我已经安装了 Apache2 并且 Python 可以工作 但我有一个问题 我有两页 一个是 Python 页面 另一个是带有 JQuery 的 Html 页面 有人可以告诉我如何让我的 ajax 帖子正常工作吗
  • jQuery 检查字体粗细是正常还是粗体

    我使用以下代码设置 font weight 属性 this css font weight normal 现在我想检查一个元素是否具有粗体或正常的字体粗细属性 我该怎么做 你可以使用以下方法得到它 fontWeight this css f
  • 带 url 参数的 Laravel post 路由

    我面临着幼虫路由的大墙 我似乎找不到解决方案 我在视图模板中有此表单
  • jQuery 中的 $('') 与 $('')

    我看到人们以两种不同的方式在 jQuery 中创建 HTML 元素
  • 付款成功后保存到数据库(paypal)

    我试图找出在客户使用 paypal 支付商品费用后将数据 之前以表单提交 保存到数据库的最佳方法 沿着这个过程的一些事情 1 在实际网站上填写表格 gt 2 登录 Paypal gt 3 立即付款 PayPal gt 4 数据已插入数据库
  • Paypal 将钱从一个帐户转移到另一个帐户

    我知道这个建议如何汇款至任何 PayPal 账户 https stackoverflow com questions 1559808 paypal api send money to any paypal account但到目前为止我所尝试
  • PHP Intl 扩展线程安全吗?

    我一直在阅读有关 PHP 中的语言环境的内容 看起来setlocale 线程有问题 我对线程不太熟悉 文档提到它不是线程安全的 我想让我的项目能够处理某些数字格式 并且 Intl 扩展似乎很有趣 http php net manual en
  • 扩展构建器中的“映射到现有表”显示 TYPO3 中的奇怪问题

    在我的扩展中MyExt 我映射了模型Page to pagesTYPO3 中的表 首先它向我展示了type mismatch错误 无论如何我继续保存它 会发生以下情况 我的页面树变成这样 我的新记录表单仅显示 UID 而不显示标题 My P
  • 发送 POST 请求时 JSON 原语无效

    我有以下 ajax 请求 其中我尝试将 JSON 对象发送到服务器 function sendData subscriptionJson ajax type POST url Url Action SubscribeSecurities S
  • 设置大型电子邮件通知系统有哪些方法?

    我的公司有一个用 PHP 构建的网站 我们使用内置的 PHP 电子邮件功能每天向订阅者发送数千封电子邮件 这是一个糟糕的主意 它堵塞了我们的服务器 并且需要几个小时才能完成整个批次 现在我已经研究过像 MailChimp 这样的群发邮件服务
  • 如何取消 AjaxForm 上的提交

    我正在使用 jQuery 插件 ajax 形式 我尝试实现这样的东西 MyFormID ajaxForm dataType json resetForm true beforeSubmit function validateData ret
  • 使用 ImageMagick (PHP) 将 2 个图像并排合并为 1 个图像

    我认为这是一件容易的事 我有 2 张图片 JPG 我希望它们合并成一张图片 其中 2 张图片并排 所以我有图片 A 和图片 B 我想要图片 AB 并排 两个图像具有相同的宽度和高度 在本例中 宽度 200px 高度 300px 但是第二个图
  • Readfile 从大文件中读取 0 字节?

    我正在尝试通过以下方式发送一个大文件readfile 但是 没有任何内容发送到浏览器 并且readfile 回报0 not false 我尝试发送的文件大小为 4GiB 并且可由 PHP 读取 我正在设置set time limit 0 以
  • 如何将变量插入 PHP 数组?

    我在网上查了一些答案 但都不是很准确 我希望能够做到这一点 id result id info array id Example echo info 0 这有可能吗 您需要的是 不推荐 info array id Example varia

随机推荐

  • 教程--从零开始使用BiSeNet(语义分割)网络训练自己的数据集

    引言 为了从图片分割出我们想要的特征 我们采用BiSeNet作为分割模型 并且在自己制作的数据集上进行训练测试 注 训练是在linux环境下的 Win下训练可能会有点问题 一 下载BiSeNet网络的安装包 1 下载地址 GitHub Co
  • jsp+servlet简单实现上传文件

    效果 1 jsp前端
  • Wireshark数据抓包分析之传输层协议(TCP协议)

    目录 预备知识 1 TCP协议的由来 2 TCP端口 3 TCP三次握手 3 1 第一次握手 3 2 第二次握手 3 3 第三次握手 4 TCP四次断开 5 TCP重置 实验目的 实验环境 实验步骤一 1 配置服务器端 2 配置客户端 3
  • 微信小程序web-view使用说明,及链接打不开问题

    开发微信小程序时 有时会需要在小程序内打开网页链接 这时就需要用到 web view 标签 web view 是小程序上用来承载网页的容器 且每个页面只能有一个 web view 它会自动铺满整个页面 并覆盖其他组件 目前个人类型的小程序上
  • Requests入门

    前言 爬虫三大库 Requests Lxml BeautifulSoup Requests库的官方文档指出 让HTTP服务于人类 Requests库的作用就是请求网站获取网页数据的 今天我们来了解一下Requests库 如果感觉博主的文章还
  • 最新最全GPT-3模型网络结构详细解析

    最近 GPT3很火 现在有很多讲GPT 3的文章 比如讲解它可以做什么 思考它的带来的影响 可视化其工作方式 看了这些文章并不足以详细了解GPT 3模型 仍然需要认真研究相关论文和博客 因此 本文主要目标 帮助其他人对GPT 3体系结构有一
  • 放炮罚计算器软件

    放炮罚计算器软件 放炮罚 又称为百胡 红胡 告胡子 跑胡子 煨胡子 是湖南人喜欢的一种字牌娱乐活动 据说起源于双峰 又称为双峰跑胡子 放炮罚由于其灵活多变 惊险刺激 而广受湖南人民的喜爱 街头巷尾随处可见在玩放炮罚的广大兄弟姐妹 这种字牌游
  • Linux进程之调度器

    1 Linux调度器的原理 Linux调度器 Linux Scheduler 负责管理这一进程在CPU上运行时的资源分配 它根据选定策略和所估算的进程行为 考量各种因素的权重 对等待在运行队列的进程按优先级排列 从而决定哪个进程能够接下来获
  • base64加密解密

    String random UUID randomUUID toString replaceAll substring 0 8 随机八位数字字母结合字符串 System out println random 2458ec59 String
  • 期货开户收费政策非常合理

    需要大家支付的费用由两部分组成 一部分是保证金 另一部分是费率 保证金和费率都由交易所收取 收取的费用是固定的 因为后期大家投资的项目是不一样的 所以需要大家准备的费用肯定也不一样 除了交易所所收取的费用以外 还包括了开户公司所收取的费用
  • 51单片机原理图

    51单片机 TOC
  • ANDROID APP的页面布局(Part I)

    做一个好的APP自然是不能缺少一个好的漂亮的且合理的页面布局了 ANDORID里面支持的布局大致上有下列即种 根据界面的需要使用不同的布局可达到事半功倍的效果 这个跟做HMTL的页面的原理是一样 好的页面看起来就是舒服 而且容易维护 1 L
  • Lambda表达式与函数式编程

    文章目录 函数式编程 Stream流 概述 为什么学 函数式编程思想 Lambda表达式 概述 Lambda表达式的前身 省略规则 Stream流 概述 案例数据准备 创建流 中间操作 终结操作 reduce归并 注意事项 Optional
  • C语言运算符优先级(超详细)

    转自 http blog csdn net huangblog article details 8271791 每当想找哪个运算符优先级高时 很多时候总是想找的就没有 真让人气愤 现在 终于有个我个人觉得非常全的 分享给大家 欢迎拍砖 C语
  • 前端开发面试题及答案整理(合集)

    前端开发面试题及答案 1 对Web标准以及W3C的理解与认识 答 标签闭合 标签小写 不乱嵌套 提高搜索机器人搜索几率 使用外链CSS和JS脚本 结构行为表现的分离 文件下载与页面速度更快 内容能被更多的用户所访问 内容能被更广泛的设备所访
  • Qt 助手 assistant 单独运行 及 字体设置

    曾经在 Qt creator上 不知道点击了哪里 Qt 助手也是可以单独运行的 这样就可以不需要安装字体了 但是 一直没有找到这个重现的规则 或者快捷键 1 运行Qt 助手 assistant linux 所在目录 xxxxxx Qt5 1
  • java调用 Myeclipse用jax-ws创建的webservice具体方法(三)

    首先需要下载所需的jar包 webservices所需全部jar包下载 点击打开链接 直接上代码 import java net MalformedURLException import java net URL import java r
  • 基于亚奈奎斯特采样和SOMP算法的平板脉冲响应空间插值matlab仿真

    目录 1 算法运行效果图预览 2 算法运行软件版本 3 部分核心程序 4 算法理论概述 5 算法完整程序工程 1 算法运行效果图预览 2 算法运行软件版本 matlab2022a 3 部分核心程序 fine regular grid NSa
  • Could not resolve placeholder 'jdbc.driverClassName' in string value "${jdbc.driverClassName}

    org springframework beans factory BeanDefinitionStoreException Invalid bean definition with name dataSource defined in f
  • $.ajaxFileUpload上传文件出现错误...问题总结

    1 加载报错 ajaxfileupload js 1 Uncaught ReferenceError jQuery is not defined 上传报错 Uncaught TypeError ajaxFileUpload is not a