JQuery ajax 上传

Posted Sun_先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JQuery ajax 上传相关的知识,希望对你有一定的参考价值。

上传数据

发送

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Ajax</title>
</head>
<body>

<form>
    <label for="username">账号</label>
    <input id="username" type="text">
    <label for="password">密码</label>
    <input id="password" type="password">
</form>
<button class="btn">提交</button>

<script src="/static/jquery.js"></script>
<script>
    $(\'.btn\').click(function () {
        var username = $(\'#username\').val();
        var password = $(\'#password\').val();
        $.ajax({
            url:\'/info\',
            type:\'post\',
            data:{\'username\':username,\'password\':password},
            success:function () {
                alert(\'成功\')
            },
            error:function () {
                alert(\'失败\')
            }
        })
    })
</script>
</body>
</html>

接收

from django.shortcuts import render

# Create your views here.

def index(request):
    return render(request,\'index.html\')

def info(request):
    if request.method == "POST":
        print(request.POST)
        return render(request,\'info.html\')

结果

上传文件

发送

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Ajax</title>
</head>
<body>

<form id="form-upload" enctype="multipart/form-data">
    <input id="picture" type="file" name="picture">
    <!-- 上传多文件,添加multiple -->
    <!-- <input id="picture" type="file" name="picture" multiple="multiple"> -->
</form>
<button class="btn">上传</button>

<script src="/static/jquery.js"></script>
<script>
    $(\'.btn\').click(function () {
        var formData = new FormData(); // 可以传一个form
        var picture = $(\'#picture\')[0].files[0]; // 获取文件对象
        formData.append(\'picture\',picture); // 图片
        formData.append(\'name\',\'kidd\'); // 字符串
        $.ajax({
            url:\'/upload\',
            type:\'post\',
            data:formData,
            cache: false,
            processData: false, // 告诉jQuery不要去处理发送的数据
            contentType : false, // 告诉jQuery不要去设置Content-Type请求头
            success:function () {
                alert(\'成功\')
            },
            error:function () {
                alert(\'失败\')
            }
        })
    })
</script>
</body>
</html>

接收

from django.shortcuts import render,HttpResponse

def upload(request):
    if request.method == \'GET\':
        return render(request,\'upload.html\')

    if request.method == "POST":
        name = request.POST.get(\'name\')
        picture = request.FILES.get(\'picture\')
        if picture:
            path = \'static/%s\'%picture.name
            with open(path,\'wb\') as f:
                for chunk in picture.chunks(): # 文件小的话,可以直接读取,使用read()
                    f.write(chunk)

        return HttpResponse(\'\')

注意

let fo = document.queryselect(\'form\')
let formData = new FormData(fo)
console.log(formData)  //这样输出,formData里面是没有数据的
以为在控制台中访问不到formData的数据,你在控制台看到的是FormData原型,存储的数据没有以对象属性的方式体现,可以理解为类的私有字段,外界访问不到,但是你可以通过formData.get("name")的方式获取到对应的表单数据。
还有千万不要写错字,例如:formData。如果报错文件是发不出去的。

以上是关于JQuery ajax 上传的主要内容,如果未能解决你的问题,请参考以下文章

jQuery / ajax 上传图片并保存到文件夹

Javascript代码片段在drupal中不起作用

如何使用 jQuery.ajax 和 FormData 上传文件

jQuery Ajax 文件上传

jQuery Ajax 文件上传

jQuery Ajax 文件上传