AJAX与文件上传

  一、ajax

  ajax(Asynchronous JavaScript And XML):异步JavaScript和XML,即使用JavaScript语句与服务器进行异步交互,传输的数据为XML(也可以是json数据)。实际上就是在JavaScript语句里用ajax可以向服务器发送请求。

  两大特点:

  1,异步交互

  2,页面局部刷新

  语法:

基于jQuery:<script>$(‘.cc‘).click(function(){        #当我们点击‘.cc’这个类的时候就会触发ajax请求
 $.ajax({
               url:‘/name/‘,      #请求的路径
               type:‘post‘,       #请求的方式
               data:{csrfmiddlewaretoken:$(‘[name="csrfmiddlewaretoken"]‘).val(),user:$(‘[name="user"]‘).val()},          #请求的数据
               success:function (data) {                        #这是请求成功后的回调函数
                   if (data.name){
                       $(‘.c1‘).html(‘用户名已存在‘);
                       $(‘.login‘).addClass(‘hide‘)
                   }
               }
           })
           });
</script>

  1,基于ajax请求的注册页面

  1.1 register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/css/bootstrap.css">
    <script src="/static/jquery-3.3.1.js"></script>
    <script src="/static/js/bootstrap.js"></script>
</head>
<body>
{% csrf_token %}
<div class="container">
    {% csrf_token %}
    <div class="row">
        <div class="col-md-5">
            <div style="color: blue;font-size: 20px">注册页面</div>
            <div>
                名字 <input type="text" name="user" class="form-control"><span class="c1" style="color: red"></span>
            </div>
            <div >
                密码 <input type="password" name="pwd" class="form-control"><span class="c2" style="color: red"></span>
            </div>
            <button class="register">注册</button>
        </div>
    </div>
</div>
    <script>
        $(‘[name="user"]‘).focus(function () {
            $(‘.c1‘).html(‘‘);
            $(‘.register‘).removeClass(‘hide‘)
        });
        $(‘[name="pwd"]‘).focus(function () {
            $(‘.c2‘).html(‘‘);
            $(‘.register‘).removeClass(‘hide‘)
        });
       $(‘[name="user"]‘).blur(function () {
           $.ajax({
               url:‘/name/‘,
               type:‘post‘,
               data:{csrfmiddlewaretoken:$(‘[name="csrfmiddlewaretoken"]‘).val(),user:$(‘[name="user"]‘).val()},
               success:function (data) {
                   if (data.name){
                       $(‘.c1‘).html(‘用户名已存在‘);
                       $(‘.register‘).addClass(‘hide‘)
                   }
               }
           })
           });
        $(‘[name="pwd"]‘).blur(function () {
            var pwd=$(this).val();
            if (pwd.length < 10){
                $(‘.c2‘).html(‘长度小于10‘);
                $(‘.register‘).addClass(‘hide‘)
            }
           });
        $(‘.register‘).click(function () {
            var name = $(‘[name="user"]‘).val();
            var pw = $(‘[name="pwd"]‘).val();
            $.ajax({
                url: ‘/registr/‘,
                type: ‘post‘,
                data: {csrfmiddlewaretoken: $(‘[name="csrfmiddlewaretoken"]‘).val(), user: name, pwd: pw},
                success: function (data) {
                    if (data.state) {
                        location.href = ‘/login/‘
                    }
                    else {
                        $(‘p‘).html(‘注册不成功‘)
                    }
                }
            })
        })
    </script>
</body>

  1.2 views.py

def registr(request):
    if request.method==‘GET‘:
        return render(request, ‘registr.html‘)
    else:
        dic={‘state‘:None}
        name=request.POST.get(‘user‘)
        pwd=request.POST.get(‘pwd‘)
        obj=UserInfo.objects.create(name=name,pwd=pwd)
        if obj:
            dic[‘state‘]=True
        return JsonResponse(dic)

def name(request):
    dic={‘name‘:None}
    name=request.POST.get(‘user‘)
    obj=UserInfo.objects.filter(name=name).first()
    if obj :
        dic[‘name‘]=True
    return JsonResponse(dic)

  1.3 呈现出来的页面

  当我们在名字栏输入数据后并且失去焦点后,就会触发一个ajax请求,它会把写在名字栏的数据发到服务器,服务器从数据库判断是否用户名已经存在,然后给ajax返回一个结果。这整个过程中,页面是不会刷新的。只是通过JavaScript在页面上添加节点而已

  二、文件上传

  1,请求头contentType:指的请求体的打包方式,总共有三种类型

  1.1 application/x-www-form-urlencoded

  这是post请求方式最常见的打包方式,如果不进行设置,都会默认这种打包方式。浏览器的原生form表单,如果不设置enctype属性,就默认这种方式打包数据。

user=alex&pwd=123    这就是这种方式打包后的数据结构

  1.2 multipart/from-data

  基于form表单上传文件,就必须让form表单的enctype等于multipart/form-data

  基于ajax上传文件时,我们就要用到Formdata类

$(‘.submit‘).click(function () {
            var formdata=new FormData();
            formdata.append(‘file‘,$(‘.file‘)[0].files[0]);     #插入上传文件的内容
            $.ajax({
                url:‘/file/‘,
                type:‘post‘,
                contentType:false,       #这一句和下一句是必须加上的
                processData:false,
                data:formdata,
                success:function (data) {
                    $(‘.c1‘).html(data)
                }
            })
        })

  1.3 application/json

  在用ajax请求时,可以把contentType改成json,但此时的数据类型就必须json数据类型

如果不用Json类型打包的话,ajax也会默认urlencoded模式打包,数据书写格式为:data:{user:‘hh‘,pwd:123}但当设置contentType=‘json‘,此时数据打包方式就变了,数据必须是json格式,所以现在该如下面这样写data:JSON.strinigfy({user:‘hh‘,pwd:123})

  2,基于form表单的文件上传

  2.1 HTML文件

<form action="" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <input type="file" name="file">
        <input type="submit">
    </form>

  2.2 视图

def file(request):
    if request.method==‘GET‘:
        return render(request,‘file.html‘)
    else:
        file_obj=request.FILES.get(‘file‘)
        name=file_obj.name
        with open(os.path.join(‘imgs‘,name),‘wb‘) as f:
            for line in file_obj:
                f.write(line)
        return HttpResponse(‘上传成功‘)

  3,基于ajax的文件上传

  3.1 HTML文件

 <input type="file" class="file">
    <input type="button" class="submit" value="submit">
    <p class="c1"></p>
    <script>
        $(‘.submit‘).click(function () {
            var formdata=new FormData();
            formdata.append(‘file‘,$(‘.file‘)[0].files[0]);
            $.ajax({
                url:‘/file/‘,
                type:‘post‘,
                contentType:false,
                processData:false,
                data:formdata,
                success:function (data) {
                    $(‘.c1‘).html(data)
                }
            })
        })
    </script>

  3.2 视图

def file(request):
    if request.method==‘GET‘:
        return render(request,‘file.html‘)
    else:
        file_obj=request.FILES.get(‘file‘)
        name=file_obj.name
        with open(os.path.join(‘imgs‘,name),‘wb‘) as f:
            for line in file_obj:
                f.write(line)
        return HttpResponse(‘上传成功‘)

原文地址:https://www.cnblogs.com/llllllll/p/10246326.html

时间: 2024-10-07 18:18:53

AJAX与文件上传的相关文章

ajax+spring文件上传

1.js代码 $(function(){ $('#upfileID').change(function(){ $.ajaxFileUpload({ url: '/upload/image', type: 'post', secureuri: false, //一般设置为false fileElementId: 'upfileID', // 上传文件的id属性名 dataType: 'text', //返回值类型,一般设置为json.application/json success: functi

ajax提交表单、ajax实现文件上传

ajax提交表单.ajax实现文件上传,有需要的朋友可以参考下. 方式一:利用from表单的targer属性 + 隐藏的iframe 达到类似效果, 支持提交含有文件和普通数据的复杂表单 方式二:使用jquery的$.ajax({..}), 支持提交普通表单,但不支持含有文件的复杂表单; ($.post 或 $.get底层用的都是$.ajax) 方式三:使用jquery插件ajaxFileUpload.js, 支持上传文件,但不支持提交表单 方式四:使用jquery.from.js,支持提交同时

7 款基于 JavaScript/AJAX 的文件上传插件

本文整理了7款基于JavaScript和AJAX的文件上传插件,这些插件基本上都能实现以下功能: 多文件上传 拖拽操作 实时上传进度 自定义上传限制 希望能为你的开发工作带来帮助. 1.  jQuery File Upload 具有多文件上传.拖拽.进度条和图像预览功能的文件上传插件,支持跨域.分块.暂停恢复和客户端图像缩放.可与任何服务端平台(如PHP.Python.Ruby on Rails.Java.Node.js.Go等)一起使用,支持标准的HTML表单文件上传. 2.  Pixelco

基于jsp的AJAX多文件上传的实现

最近的项目开发中,遇到了一个多文件上传的问题,即在不刷新页面的情况下,上传多个文件至服务器.现总结分享如下: 本文主要采用了基于jsp的ajax,jquery,servlet等技术. 1.upload.jsp 点击上传时,调用对应的fileupload函数,通过ajax将文件异步传送到servlet中处理.注意在文件上载时,所使用的编码类型应当是"multipart/form-data",它既可以发送文本数据,也支持二进制数据上载. <%@ page language="

基于jquery的Ajax实现 文件上传

---------------------------------------------------------------遇到困难的时候,勇敢一点,找同学朋友帮忙,找导师求助. Ajax Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是"异步Javascript和XML".即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据). 同步交互:客户端发出一个请

ajax结合文件上传类进行多文件的单个上传

今天做项目的时候碰见一个问题:之前一个同事离职之前做了一个网站,有一个上传商品详细图片的功能,当时已经完成,但是由于后期程序的有更改以及更改的程序员的水平也是参差不齐,最后导致程序bug很多,由于当时用的是一个框架,最终也没找到说明文档,后来我就重新写了一个结合ajax上传文件的upload.classs.php虽然界面欠缺美观,但是通俗易懂好维护. //首先是页面. index.php <!DOCTYPE html> <html lang="en"> <

SpringMVC案例3----spring3.0项目拦截器、ajax、文件上传应用

依然是项目结构图和所需jar包图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVuamFtaW5fd2h4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVuamFtaW5fd2h4/font/5a6L5L2T/fontsize/400/fil

Ajax实现文件上传

利用html5中的file对象利用FormData对象进行上传 前端页面 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Ajax文件上传</title> </head> <script type="text/javascript"> function upfi

JavaWEB+Ajax实现文件上传

准备:我们需要找一张绿色或者其它颜色的背景图,放在photo文件夹里就好哈,然后加jar:common-io和commo-fileupload就可以哈 创建progress.css文件: .pro{   height:15px;   width:500px;   background: #FFFFF0;   border: 1px solid #8FBC8F;   margin: 0;   padding: 0;   display:none;   position: relative;   l