Ajax向后端发送数据可以有三种方式:原生Ajax方式,jQuery Ajax方式,iframe+form 方式(伪造Ajax方式)

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.btn {
background-color: coral;
color: white;
padding: 5px 10px;
border-radius: 26%;
cursor: pointer;
}
</style>
</head>
<body>
<h1>原生Ajax测试</h1>
<a class="btn" onclick="AjaxTest1()">get发送</a>&nbsp;&nbsp;<a class="btn" onclick="AjaxTest2()">post发送</a> <h1>仿Ajax(iframe+form)测试</h1>
<iframe src="" frameborder="" id="ifm" name="ifm"></iframe>
<form action="/ajax" method="get" target="ifm" id="fm">
<p><input type="text" name="user"></p>
<p><a onclick="AjaxTest4()">提交</a></p>
{% comment %} <p><input type="submit" value="提交"></p>{% endcomment %}
</form> <h1>上传文件</h1>
<h3>Ajax(jQuery+原生)上传</h3>
<p><input type="file" id="file"></p>
<a class="btn" onclick="AjaxTest5()">上传</a> <h3>Ajax(iframe+form)上传</h3>
<iframe src="" frameborder="" id="ifm2" name="ifm2"></iframe>
<form action="/ajax" method="post" target="ifm2" enctype="multipart/form-data" id="fm2">
<p><input type="file" id="if_file" name="k3"></p>
<a class="btn" onclick="AjaxTest6()">上传</a>
</form> <script>
function AjaxTest1() {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
console.log(xhr.responseText);
}
};
xhr.open("GET", "/ajax?p=123");
xhr.send(null);
} function AjaxTest2() {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
console.log(xhr.responseText);
}
};
xhr.open("POST", "/ajax");
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset-UTF-8");
xhr.send("p=222");
} function AjaxTest4() {
document.getElementById("ifm").onload = AjaxTest3;
document.getElementById("fm").submit();
} function AjaxTest3() {
{#console.log(thi.contentWindow.document.body.innerText);#}
{#console.log($(thi).contents().find("body").html());#}
var content = this.contentWindow.document.body.innerHTML;
var obj = JSON.parse(content);
if (obj.status) {
alert(obj.message);
}
} function AjaxTest5() {
var formdata = new FormData()
formdata.append("k1", "v1");
formdata.append("k2", "v2");
formdata.append("k3", document.getElementById("file").files[0]);
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
console.log(xhr.responseText);
}
};
xhr.open("POST", "/ajax");
{#xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset-UTF-8");#}
xhr.send(formdata);
} function AjaxTest6() {
document.getElementById("ifm2").onload = AjaxTest7;
document.getElementById("fm2").submit();
} function AjaxTest7() {
{#console.log(thi.contentWindow.document.body.innerText);#}
{#console.log($(thi).contents().find("body").html());#}
var content = this.contentWindow.document.body.innerHTML;
var obj = JSON.parse(content);
console.log(obj);
}
</script>
</body>

三种方式传递数据和上传文件HTML页面

 from django.shortcuts import render,HttpResponse,redirect
import uuid
import os
import json # Create your views here.
def ajax(request):
print("get请求:",request.GET)
print("post请求:",request.POST)
# print("请求体:",request.body)
print(request.FILES)
ret={'status':True,'message':'ok!'}
file=request.FILES.get("k3")
f=open(file.name,"wb")
for i in file.chunks():
f.write(i);
f.close() return HttpResponse(json.dumps(ret)) def index(request):
return render(request,"index.html")

后端view函数接收数据

模拟网站上传图片并在网页实时显示图片效果

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<iframe src="" frameborder="" id="ifm" name="ifm" style="display: none"></iframe>
<form action="/upload" method="post" enctype="multipart/form-data" id="fm" target="ifm">
<p><input type="file" onchange="upload()" name="img"></p>
</form>
<h3>预览</h3>
<div id="preview"> </div>
<script src="/static/jquery-1.11.0.js"></script>
<script>
function upload() {
document.getElementById("ifm").onload = uploadifm;
document.getElementById("fm").submit();
} function uploadifm() {
var content = this.contentWindow.document.body.innerHTML;
var obj = JSON.parse(content);
var tag = document.createElement("img");
tag.src = obj.path;
$("#preview").empty().append(tag);
}
</script>
</body>
</html>

上传图片并在上传页面展示HTML页面

 from django.shortcuts import render,HttpResponse,redirect
import uuid
import os
import json # Create your views here. def upload(request):
if request.method=="GET":
return render(request,"upload.html")
else:
dic={'status':True,'path':None,'message':None}
img=request.FILES.get("img")
uid=str(uuid.uuid4())
file_path=os.path.join("static",uid+img.name)
f=open(file_path,"wb")
for i in img.chunks():
f.write(i)
f.close()
dic["path"]=file_path
dic["message"]="上传成功!"
return HttpResponse(json.dumps(dic))

上传图片并在上传页面展示后端view函数

Ajax上传数据和上传文件(三种方式)的更多相关文章

  1. hive 分区表与数据产生关联的三种方式

    所谓关联,可以理解为能够使用select查询到 1.load 这是最常用的一种方式 load data [local] inpath "数据路径" into table table ...

  2. MVC ,Action方法传数据给视图有几种方式?--PS:tempData和Viewbag,还有ViewData之间的区别

    //---------------------------------控制器向视图传递数据 public ActionResult TransData() { //1.ViewBag ViewBag. ...

  3. getline数据来源你的三种方式

    (1)getline从交互式的用户输入中\c中获取内容: # awk 'BEGIN {system("echo \"Input your name:\"");g ...

  4. C#批量插入数据到Sqlserver中的三种方式

    本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生 成 ...

  5. 【转载】C#批量插入数据到Sqlserver中的三种方式

    引用:https://m.jb51.net/show/99543 这篇文章主要为大家详细介绍了C#批量插入数据到Sqlserver中的三种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本篇, ...

  6. Git应用详解第四讲:版本回退的三种方式与stash

    前言 前情提要:Git应用详解第三讲:本地分支的重要操作 git作为一款版本控制工具,其最核心的功能就是版本回退,没有之一.熟悉git版本回退的操作能够让你真真正正地放开手脚去开发,不用小心翼翼,怕一 ...

  7. Django文件上传三种方式以及简单预览功能

    主要内容: 一.文件长传的三种方式 二.简单预览功能实现 一.form表单上传 1.页面代码 <!DOCTYPE html> <html lang="en"> ...

  8. 三种方式上传文件-Java

    前言:负责,因为该项目他(jetty嵌入式开始SpringMvc)实现文件上传的必要性,并拥有java文件上传这一块还没有被曝光.并 Http 更多晦涩协议.因此,这种渐进的方式来学习和实践上载文件的 ...

  9. 头像截图上传三种方式之一(一个简单易用的flash插件)(asp.net版本)

    flash中有版权声明,不适合商业开发.这是官网地址:http://www.hdfu.net/ 本文参考了http://blog.csdn.net/yafei450225664/article/det ...

随机推荐

  1. VisualStudio使用HALCIN_NET控件

    遵循以下步骤在一个应用中添加Halcon/.Net: 一. 定义工具箱 Halcon/.net 不仅提供了一个类库,而且提供了一个控件:HWindowControl,它包含一个显示图像处理结果的Hal ...

  2. Python-scapy学习

    scapy-arpspoof from scapy.all import Ether,ARP,sendp,getmacbyip Ether:用来构建以太网数据包 ARP:构建ARP数据包的类 send ...

  3. 2015-09-14-初级string

    标准库string类型 string对象初始化 string s1; string s2(s1); string s3("value"); string s4(n,'c'); st ...

  4. C++入门级小算法

    反序输出一个整数 #include <iostream> using namespace std; int main() { int n; while (cin >> n)// ...

  5. SpringMVC 数据校验(JSR-303)

    项目中,通常使用较多的是前端的校验,比如页面中js校验以及form表单使用bootstrap校验.然而对于安全要求较高点建议在服务端进行校验. 服务端校验: 控制层controller:校验页面请求的 ...

  6. java 通过数据库名获得 该数据所有的表名以及字段名、字段类型

    package com.nf.lc.sql_meta_data; import java.sql.*; import java.util.HashMap; import java.util.Map; ...

  7. yii2.0 集合七牛SDK 上传图片到第三方

    首先,请用composer下载七牛phpSDK (具体参考官方文档) composer require qiniu/php-sdk 注册七牛账号 获取 AK SK(密匙) ,创建资源对象 获取doma ...

  8. Java NIO-09-零拷贝之 DMA

    DMA 的好处 在介绍DMA之前我想问大家:我们为什么要引入DMA,DMA对我们有什么好处那? 计算机系统中各种常用的数据输入/输出方法有查询方式(包括无条件及条件传送方式)和中断方式,这些方式适用于 ...

  9. LeetCode~941.有效的山脉数组

    941.有效的山脉数组 给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false. 让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组: A.length > ...

  10. 5——PHP逻辑运算符&&唯一的三元运算符

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...