实现Ajax提交数据的三种方式

Ajax 提交表单与文件上传 通过使用 Ajax 技术,我们可以轻松实现表单提交和文件上传功能,并且在不刷新页面的情况下与用户进行交互,极大地提升了用户体验。本文介绍的代码示例涵盖了从前端到后端的实现过程,你可以根据实际项目需求进行调整和扩展。在实际开发中,注意优化代码和处理各种边界情况,以确保应用的稳定性和安全性。 阅读详情

Ajax提交数据的三种方式

Ajax发送请求的特点是不刷新页面,很常用

一,原生Ajax

实现方式:使用 浏览器中的XmlHttpRequest对象来完成请求

优点:不依赖插件,直接快捷
缺点:代码叫复杂,并且有的低版本浏览器不支持

url关系:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),
    path('ajax1/', views.ajax1),
]

views函数:

def index(request):
    return render(request,"ajax1.html")

def ajax1(request):
    return HttpResponse("这是原生Ajax")

html文件

<h1>这是原生Ajax</h1>
<button id ="ajax1">提交</button>
<script>
    document.getElementById("ajax1").onclick=function () {
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange=function () {
            if (xhr.readyState==4){
                alert(xhr.responseText)
            }
        };
        xhr.open("GET","/ajax1");  //GET请求
        xhr.send(null)
        //xhr.open("POST","/ajax1");  //POST请求
        //xhr.send("p=456")
        //如果请求方式是POST,要加上下面的请求头
        //xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset-UTF-8');
        //POST方式提交数据也发送到了request.body,Django要根据请求头将数据再解析到request.POST
    }
</script>

二,jQuery下的ajax

实现方式:用JavaScript的类库jQuery对浏览器对象XMLHttpRequest 或 ActiveXObject做好了上层封装

优点:简单快捷
缺点:依赖插件,影响性能

<h1>这是Jquery下的ajax</h1>
<button id ="ajax2">提交</button>
<script src="/static/jquery-3.1.1.min.js"></script>
<script>
    $("#ajax2").click(function () {
        $.ajax({
            url:"/ajax2",
            method:"GET",
            data:{"p":123},
            success:function (arg) {
                var ele=JSON.parse(arg);
                if (ele.status){
                    alert(ele.message)
                } else {
                    alert("操作失败")
                }
            },
            error:function () {
              alert("发送失败")
            }
        })
    })
</script>

三,"伪"Ajax (网站最常用)

实现方式:html里的iframe标签和form表单

优点:兼容性最好
缺点:暂无

<h1>这是伪ajax</h1>
<iframe id="iframe" name="ifra" style="display: none"></iframe>
<form action="/ajax3" method="post" target="ifra">
    <input type="text" name="name">
    <input type="submit" value="t提交">
</form>
<script>
    document.getElementById("iframe").onload=function () {
    //后台返回数据后,iframe标签里重新生成一个hlml,数据在html的body标签里
        var ele=this.contentWindow.document.body.innerHTML; //取到iframe标签的内容
        //$(this).contents().find("body").text()   jQurey方式查找
        var data=JSON.parse(ele)   //依照需求反序列化
        if(data.status){
            alert(data.message)
        }else{
            alert("发送失败")
        }
    }
</script>

以上提交的都是字符串,字典里面套字典需要序列化。那么如果是文件呢?
首先在form表单放入<input type="file">,form表单直接打包处理,
那伪类ajax就自然解决了

那剩下的两种方式怎么做呢?
它们两个是一样的,都是需要借助FormData对象

原生Ajax上传文件:

<h1>这是原生Ajax</h1>
<input type="file" id="img">
<button id ="ajax1">上传</button>
<script>
    document.getElementById("ajax1").onclick=function () {
        var date=new FormData();
        date.append("k1","v1");
        date.append("k2","v2");
        date.append("k3",document.getElementById("img").files[0])
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange=function () {
            if (xhr.readyState==4){
                alert(xhr.responseText)
            }
        };
        xhr.open("POST","/ajax1/");  //GET请求
        xhr.send(date)
    }   //用FormData对象提交数据,提交方式就是POST,也不用另加请求头
</script>

jQuery下的ajax上传文件:

<h1>这是Jquery下的ajax</h1>
<input type="file" id="img">
<button id ="ajax2">提交</button>
<script src="/static/jquery-3.1.1.min.js"></script>
<script>
    $("#ajax2").click(function () {
        var data=new FormData();
        data.append("k1","v1");
        data.append("k2","v2");
        data.append("k3",$("#img").files[0]);
        $.ajax({
            url:"/ajax2/",
            method:"POST",
            data:data,
            success:function (arg) {
                var ele=JSON.parse(arg);
                if (ele.status){
                    alert(ele.message)
                } else {
                    alert("操作失败")
                }
            },
            error:function () {
              alert("发送失败")
            },
            processData: false,  // tell jQuery not to process the data
            contentType: false,  // tell jQuery not to set contentType
        })
    })
</script>

用FormData对象作为数据传递,记得加上两个参数 processData: false, contentType: false, 改为false

小总结:
1.没有form表单的封装,需要用FormData对象来上传文件,当然只上传数据也可以用
2.FormData对象中添加数据:append("键名":键值)
3.获取到文件的方式:$("#img").files[0]

再补充一个后台接收到文件保存到本地方法:

def ajax1(request):
    print(request.GET)
    print(request.POST)
    print(request.FILES)
    file=request.FILES.get("k3")
    print(file.name)
    print(file.size)
    f=open(file.name,"wb")
    for line in file.chunks:
        f.write(line)
    f.close()
    return HttpResponse("这是原生Ajax")

**

写一个选择图片加预览效果:

**
思路:<input type="file" >标签内容发生变化后,自动上传到后台,后台接收到之后存到本地,把路径再发给前端

HTML部分:

<h1>这是伪ajax</h1>
<iframe id="iframe" name="ifra" style="display: none"></iframe>
<form id= "fm" action="/ajax3/" method="post" target="ifra" enctype="multipart/form-data">
{#    taget建立连接,把form表单数据用iframe发送#}
    <input type="file" name="k3" id="autosubmit">
    <div id="preview"></div>
</form>
{#<script src="/static/jquery-3.1.1.min.js"></script>#}
<script>
    document.getElementById("autosubmit").onchange=function(){   //image标签绑定onchange,内容变化就触发
        console.log(8888);
        document.getElementById("fm").submit();};
    document.getElementById("iframe").onload=function () {
        var ele=this.contentWindow.document.body.innerHTML; //取到iframe标签的内容
        //$(this).contents().find("body").text()   jQurey方式查找
        var data=JSON.parse(ele);   //依照需求反序列化
        var tag=document.createElement("img"); //创建一个新的image标签
        tag.src="/"+data.path;       //从后台本地取照片
        {#$("#preview").empty().append(tag)#}    //jQuery方式
        document.getElementById("preview").innerHTML='' ;
        document.getElementById("preview").appendChild(tag)
    }
</script>

后台部分:

def ajax3(request):
    import os,uuid,json
    nid=str(uuid.uuid4())  #随机产生一段字符串
    req = {"status": True, "path":None,"message": "伪ajax"}
    file = request.FILES.get("k3")
    file_path=os.path.join("static",nid+file.name)
    f = open(file_path, "wb")
    for line in file.chunks():
        f.write(line)
    f.close()
    req["path"]=file_path
    return HttpResponse(json.dumps(req))
使用ajax向服务器发起post请求(提交数据给服务器) 前端开发:网络请求后台数据,使用ajax向服务器发起post请求(提交数据给服务器) 阅读详情

相关推荐

野火STM32F407(骄阳)+无刷直流驱动板+永磁同步电机控制学习记录(四)(基于HAL库)

以上内容都是参考别人资料自学的,很多地方都是凭感觉,因为理论部分不太会算,只要电机能转就行,其他性能指标都没考虑,因为不会,所以这纯属是学习记录帖。带宽在500时,电流波动小,但是响应很慢,就是堵转后不太容易恢复转动。速度环带宽设定小了,响应不够快,带宽设定大了波动比较大,电机感觉起来也震一点,而且,当带宽设到200的时候,启动直接就锁死了,应该是PI增益设定太大了。电流环带宽的试验:去掉速度环,让Iq_Set=2,Ud=0,此时电机是电流环闭环控制,用手堵转电机然后松开,看电流的波动以及响应情况。

XUEXIDEXIAOhai的博客 4553

前后端交互之——AJAX提交

学前后端也有一段时间了,一直没有时间整理一下前后端交互方面的知识,想着再回顾一下顺带着整理出自己的学习笔记。

荔枝当大佬的博客 1912

Astah 9.0升级步骤(Widnows/Mac OS)

Astah Professional是一款全新的轻量级UML建模工具。软件集思维导图和UML建模于一体,采用100%纯JAVA构建, 兼容性强,不仅能够实现分布式建模、项目合并,还能够实现和其它建模工具的交互。

tequiero777的博客 2824

ajax请求 POST丨ajax简介,ajax提交数据的多种类型

Ajax其实质是利用浏览器提供的一个特殊的对象(XMLHttpRequest)异步地向服务器发送请求,服务 器返回部分数据,浏览器让你去利用这些数据对象页面做部分的更新,整个过程,页面无刷新,不打断用 户的操作。同步和异步的区别同步:如果与服务器端的交互方式是同步,当客户端与服务器交互时,客户端就不能进行其他 操作,只能等待服务器端的响应,会刷新页面。异步:当客户端正在进行正常操作时,还可以同时与服务器进行交互,服务器响应客户端信息,将 信息更新到网页局部,整个过程页面不刷新。'''

灵感与学习结合-echo 5398

C++新手也能搞定!Windows下Cesium-Native编译全流程(附依赖下载技巧)

本文为C++新手详细介绍了在Windows系统下编译Cesium-Native库的全流程。重点针对网络环境不佳的情况,提供了手动下载依赖库的实用技巧,并指导用户使用CMake配置、生成解决方案,最终完成编译与测试验证,帮助开发者成功构建这一处理3D地理空间数据的C++运行时库。

weixin_28839549的博客 381

AU混响终极指南:从‘干声’到‘空间感’,用总音轨和发送技巧打造专业人声

本文详细介绍了如何在Adobe Audition(AU)中使用混响效果器,通过总音轨和发送技巧将‘干声’转化为具有专业‘空间感’的人声。从混响基础原理到总线架构设置,再到精细控制和自动化调整,全面解析了提升音频质量的实用技巧,适用于音乐制作、播客和内容创作。

weixin_30512089的博客 333

ajax请求指定方法,ajax 三种提交请求的方法

1、ajax 提交请求$.ajax({type:"post",url : "${ctx}/front/Hotel/getAllHotelByAjax.do",dataType : "json",success : function(result) {try {for(var i=0;i$(".cityHotel_ul").append(""+result[i].hotelName+"");}} c...

weixin_30110543的博客 945

YOLOv8改进 | 融合篇,YOLOv8改进主干网络为MobileNetV3+CA注意机制+添加小目标检测层(全网独家首发,实现极限涨点)

小目标检测难点众多,导致很多算法对小目标的检测效果远不如大中型目标。影响算法性能的主要原因如下:第一,小目标分辨率低、信息量不足,导致神经网络提取到的有效特征较少。第二,小目标在图像中所占的区域较小,易受背景干扰,这对算法的定位性能要求较高。第三,小物体标注困难,训练数据有限,导致模型泛化能力差。例如多尺度学习、无锚机制和生成对抗学习等方法,都能提高小目标检测的准确性和鲁棒性。为了改善小目标漏检现象严重的问题,我在 YOLOv8 中增加了 P2 检测头,相当于有四个检测头,使网络能检测到更小的目标。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2858

Extjs中三种不同的数据提交方式

Extjs中三种不同的数据提交方式   Extjs的三种提交方式: 表单Ajax提交,普通提交,单独Ajax提交; 1.表单ajax提交(默认提交方式) 提交函数:当按下表单中的提交按钮时执行下面的btn函数,按照表单的name进行提交。提交数据后根据后台的返回值不同来回调success或者failure函数(和单独ajax的提交不同),后台返回值的形式: 【如果返

GoodShot的专栏 1万+

【安全启动】HSM安全启动原理与技术实现白皮书

摘要: 安全启动(Secure Boot)与度量启动(Measured Boot)通过硬件信任根(HSM/TPM等)确保系统启动链路的可信性,实现代码验证与状态记录。HSM作为核心组件,承担密钥保护、签名验证和密码运算任务,与SHE、TPM等协同构建分层信任链。通用计算与嵌入式/汽车场景的启动流程差异显著,前者依赖TPM的PCR度量,后者以HSM为核心实现硬件级安全闭环。工程实践中需权衡性能、合规性及抗攻击能力,并结合后量子密码(PQC)等演进技术优化方案。

weixin_46481662的博客 834

AI Agent 架构的底层原理与核心机制

AI Agent五层架构实现智能闭环运转:1)感知层负责多模态信息输入与预处理;2)记忆层分类存储短期/长期记忆及知识库;3)认知层通过ReAct推理和反思机制进行决策规划;4)工具层调用外部API扩展能力边界;5)执行层完成任务输出并形成反馈闭环。五层架构通过"输入-处理-输出-优化"的联动机制,使Agent具备自主决策、持续学习和任务执行能力,突破传统LLM的局限,实现从信息处理到实际落地的完整智能体系。

女王の专属领地 496

ajax提交那些数据必须用post_AJAX常见提交数据的三种方式

一、键值对方式提交AJAX提交控制器接收方式1:属性接收 @RequestMapping("stu/add") @ResponseBody public HashMap add(String stuNum,String stuName,String stuSex,int stuAge){ System.out.println(stuNum); Syst...

weixin_31650287的博客 394

YOLOv11 改进 - Mamba | 集成Mamba-YOLO(AAAI 2025),Mamba-YOLOv11-B 替换骨干,破解全局依赖建模难题,实现高效实时检测

本文介绍Mamba YOLO,为图片物体识别提供了“又快又准”的新方案。传统CNN架构运行快但难以捕捉远距离关联物体,Transformer架构精度高但计算量呈平方级增长,而SSM虽计算量为线性级且能抓全局关联,但用于图片识别时细节定位不准。为此,Mamba YOLO做了三项关键优化:引入ODMamba骨干网络,解决自注意力的二次复杂度问题,且无需预训练;设计ODMamba宏观结构确定最佳阶段比例和缩放大小;采用多分支结构的RG块建模通道维度,解决SSM在序列建模中的不足。在COCO数据集测试中,其小版本推

魔改工程师的博客 858

Ajax提交表单数据的几种方式

总结一下Ajax提交表单数据的几种方式第一种方式 1.手工填写表单数据 2.使用serialize( )函数提交 3.使用jquery Form插件提供的ajaxSubmit()函数

qq_17164811的博客 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Web页面向后台提交数据的方式和选择

转自:https://www.cnblogs.com/pyyblogs/p/5899094.html 1、通过表单提交 这是HTML支持最传统的提交方法,需要创建表单,然后表单包含各种类型的表单元素,还要有一个提交按钮,通过提交按钮来提交到后台,这种方式提交后页面会刷新。 表单提交的方式 (1)在表单中定义submit按钮 (2)表单绑定onsubmit事件 (3)<form&g...

DAIJZ12138的博客 825

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

MVC提交表单的方式

Form(表单)对于WEB开发人员来说,可谓是再熟系不过了 ,From它是页面和WEB服务器交互过程中最重要的信息来源 ,现在我来说一说在ASP.net.MVC框架中是如何提交表单的 Input控件(submit)提交方式(post) ,先用一个简单的表单来实现简单的处理方式  下面是简单的表单的HTML代码  这个HTML表单用的是Bootstrap4来写的 ,在这个HTML表单中 ,我...

weixin_44547598的博客 1529

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

js中常用的请求提交方式

1、 IO提交     IO({ url : requestpix+'/findloaninfo.shtml',        type: 'post',        dataType: 'json',        data: {         receipt_id     :  receipt_id,         validates_radio:  Group.g

静静的博客 3649

Form表单提交,Ajax请求,$http请求的区别

做过前端同学想必都避免不了要和后台server打交道。而以下这三种与后台交互的方式想必大家都不陌生。 Form表单提交,Ajax请求,Angular的$http请求 以前一直搞不清楚什么时候应该用哪种方式请求数据,正好最近在做文件上传相关业务,顺便对这三种方式的使用场景及区别做个简单总结。 用法 以下是三种请求方式的API详细介绍: Form: https://www.w3schools.com/h

sinat_32434539的博客 488

ajax异步提交base64图片字符串需要注意的问题

利用ajax异步提交base64图片字符串需要注意这些问题 1,利用ajax提交base64图片字符串的时候,因为base64字符串中有特殊字符,会被转移,需要str.replace(/\&/g,"%26");str.replace(/\+/g,"%2B"); 把字符串中的‘&’、+ 转义 2 。或把base64图片字符串 encodeURIComponent(dataurl) 加密

满天星 7376

ajax和form提交复选checkBox

一,用form表单 很普通的使用方法: html: 后台: String[] cbs=request.getParameterValues("cb"); 二,用url传,数组参数要加[] 页面url传 eg:www.hao123.com?cb[]=1&cb[]=2 后台 String[] cbs=request.getParameterVal...

u010314099的博客 972

php 后台提交网页,浅谈Web页面向后台提交数据的方式和选择

1、通过表单提交这是HTML支持最传统的提交方法,需要创建表单,然后表单包含各种类型的表单元素,还要有一个提交按钮,通过提交按钮来提交到后台,这种方式提交后页面会刷新。2、通过网页链接提交可以在网页的链接附上需要提交的参数,当用户点击链接后,浏览器发起向链接的访问,从而也把链接附带的参数提交到后台,这种方式提交后页面也会刷新。3、通过ajax提交Javascript支持ajax方式创建HTTP请求...

weixin_39853590的博客 197

ajax提交url 与ajax提交表单的比较

http://wawa129.iteye.com/blog/1488221 1:ajax自已构造一个url,这种方式传参数要用Data,不能用于表单提交。 例: function createHtml(id){ $("#reloading").show(); //edit_bg是个div,提交时显示,这样可以使...

weixin_30909575的博客 51

提交表单的方式

提交表单的方式: 1 通过type类型为submit的按钮类(Button LinkButton ImageButton等)来提交 2 通过 javascript 提交表单 (form.submit); 3 ajax 提交表单 若提交之前需要验证,form表单中 属性 onsubmit 增加验证函数 ex: onsubmit="return validateform()" ,若val...

weixin_30298497的博客 95
上一篇: Django之Form组件介绍
下一篇: 跨域AJAX总结
月守护
博客等级 码龄7年 210粉丝 160原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值