jquery - thinkphp3.2.3 ajax上传图片
高洛峰
高洛峰 2017-04-11 10:29:48
[PHP讨论组]

控制器代码

html代码

怎么改能按了提交就显示出来?这个thinkphp这个post数据是怎么用的,怎么我在控制器完全不用post过来数据呢?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(2)
ringa_lee

ajax上传文件需要使用formData对象

var formData = new FormData($( "form" )[0]);  
$.ajax({  
       url: '__CONTROLLER__/upload' ,  
       type: 'POST',  
       data: formData,  
       dataType:'json',
       async: false,  
       cache: false,  
       contentType: false,  
       processData: false,  
       success: function (response) {  
           if(response.status == 1){
               //判断返回的status来确定文件是否上传成功,以及上传成功后要做的操作
           }
           alert(response.msg);  
       },  
});  

php代码最后得改一下

if(!$info){
    $data = [
        'status'=>0,
        'msg'=>'上传失败,'.$upload->getError()
    ];
}else{
    $data = [
        'status'=>1,
        'msg'=>'上传成功'
    ];
}
echo json_encode($data);die;   //这样ajax用json接收才能正确弹出php返回的信息
//或者return $this->ajaxReturn($data);
PHP中文网

首先, 哪怕是测试代码, 换行啊,命名啊,缩进啊,也一定要规范, 因为你是给别人看的, 同理,代码也不要直接上图片, markdown语法稍微看一眼, 再说SF的markdown编辑器也挺好用的

好了, 吐槽结束, 开始回答问题:

「怎么我在控制器完全不用post过来数据呢?」

答: 既然你发现不用你给数据,那么就证明数据是ThinkPHP的 Upload 类完成了这一工作, 所以咱们去找一下.

Upload 类文件位于 ThinkPHP/Library/Think 目录下的 Upload.class.php 文件中.

先看一下是不是 __construct 中获取的数据呢?
不贴代码了, 题主自己去看下吧, 结果是不是.

既然不是, 那就去找一找下面调用的 upload 方法.

/**
 * 上传文件
 * @param 文件信息数组 $files ,通常是 $_FILES数组
 */
public function upload($files='') {
    if('' === $files){
        $files  =   $_FILES;
    }
    ......
}

好的, 找到了, ThinkPHP的注释也写的很清晰了, 讲明了它是使用 $_FILES 这个 超全局变量 获取的文件数据. 那么 $_FILES 这个 超全局变量 是做什么的呢? 移步: PHP文档

下一个问题:

「怎么改能按了提交就显示出来?」

答: 先打印出自己成功获取到的文件数据与路径, 然后在 $.ajaxsuccess 回调中, 向 body 中插入 img 标签, src 属性为刚刚获取到的图片路径.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号