ajax跨域返回json
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于ajax跨域返回json内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在ajax跨域返回json相关知识领域提供全面立体的资料补充。同时还包含 android、a href、abap 的知识内容,欢迎查阅!
ajax跨域返回json相关知识
-
跨域Ajax之ContentType:application/json在使用Ajax跨域请求时,如果设置Header的ContentType为application/json,会分两次发送请求。第一次先发送Method为OPTIONS的请求到服务器,这个请求会询问服务器支持哪些请求方法(GET,POST等),支持哪些请求头等等服务器的支持情况。等到这个请求返回后,如果原来我们准备发送的请求符合服务器的规则,那么才会继续发送第二个请求,否则会在Console中报错。为什么在跨域的时候设置ContentType为application/json时会请求两次?其实JQuery的文档对此有做说明。contentType (default: 'application/x-www-form-urlencoded; charset=UTF-8')Type: Boolean or StringWhen sending data to the server, use this content type. Default is "application/x-www-fo
-
jQuery ajax 跨域请求jQuery官方apigetJSON(http://api.jquery.com/jQuery.getJSON/)的说明中有这样一段AdditionalNotes:Duetobrowsersecurityrestrictions,most"Ajax"requestsaresubjecttothesameoriginpolicy;therequestcannotsuccessfullyretrievedatafromadifferentdomain,subdomain,orprotocol.ScriptandJSONPrequestsarenotsubjecttothesameoriginpolicyrestrictions.所以一般的ajax跨域请求返回不了什么东东的。只有script和jsonp两种可以返回。举例:对于jsonp,有url?jsonCallBack=?在后台,如jsp中如最后这样写Stringjson="{\"name\":\"L
-
ajax跨域请求之JSONP的使用之前在工作中遇到了跨域访问的问题,此次记录使用json的过程。注意:jsonp只适合类型为get的请求;只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题。 $.ajax({ type:"get", //请求方式,此处给post仍会以get方式提交 dataType:"jsonp",//预期服务器返回的数据类型 jsonp:"callback",//在一个jsonp请求中重写回调函数的名字 jsonpCallback:"callback",//为jsonp请求指定一个回调函数名 url:"http://127.0.0.1/login", //请求地址 data:"{name:'
-
Ajax 如何解决跨域问题我们在 Web 开发过程中经常使用 Ajax 来异步的获取数据,尤其是在前后端分离的架构中基本上都是通过 Ajax 获取数据,渲染页面都由前端浏览器来完成。通常这种前后端分离的架构,对于前端开发者来说已经像开发客户端 App 一样的开发 Web,获取数据也有专门封装好的 RESTful Client 组件来获取数据,不过它的原理也是使用了浏览器的 XMLHttpRequest 这个对象来实现异步请求数据。但是当在域 domain-a.com 下想要通过 Ajax 来请求域 domain-b.com 的数据时,会遇到跨域的问题,通常这种跨域是不被浏览器允许的,如何解决呢?JSONPJSONP 是一个解决方案,它的原理:在 HTML 中创建一个<script src="">标签,其中src属性中的地址就是接口地址;并创建好回调方法,把得到数据后的逻辑写到这个方法中;接口地址返回一段 JavaScript ,其内容为执行回调方法并传入 JSON 数据;在创建<script s
ajax跨域返回json相关课程
ajax跨域返回json相关教程
- Ajax 跨域 我们先从这么一个问题来引入我们本章节的学习 —— 什么是跨域请求?
- 1.跨域请求 简单来说,跨域请求就是一个域下的资源请求另外一个域下的资源。同一个域,指的是,协议名、域名、端口号都一致。 举个例子来说,假如 “http://www.a.com” 下的 JavaScript 脚本发起 Ajax 请求 “http://www.a.com/ajax” ,由于 协议名 http 、域名 www.a.com 和 端口号(默认都是 80)三者都是一致的,因此都属于同一个域,不造成跨域请求。而假如其中任一元素不相同,则造成跨域请求。与此同时,浏览器出于安全考虑,基于同源策略则会做一定的限制:比方说:无法获取不同域的 Cookie、LocalStorage 等等。无法获取不同域的 DOM 对象。无法向不同域发送 Ajax 请求。
- 3.2 返回 json 类型 视图函数直接返回 json 数据是在微服务架构中常见的套路。这里 Django 程序只提供后端数据并不提供静态资源。针对返回 json 数据,在 Django 中专门定义了一个 JsonResponse 类用来生成 json 数据。它实际上是继承自 HttpResponse 类:# django/http/response.py# 忽略其他内容class JsonResponse(HttpResponse): """ 忽略注释部分内容 """ def __init__(self, data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs): if safe and not isinstance(data, dict): raise TypeError( 'In order to allow non-dict objects to be serialized set the ' 'safe parameter to False.' ) if json_dumps_params is None: json_dumps_params = {} kwargs.setdefault('content_type', 'application/json') data = json.dumps(data, cls=encoder, **json_dumps_params) super().__init__(content=data, **kwargs)JsonResponse 类的使用和 HttpResponse 类一样简单,我们只需要把字典数据传给 JsonResponse 类进行实例化即可。但是字典数据中存在中文时候,会出现乱码,我们只需要在实例化 JsonResponse 时,多传入一个参数即可:# 在页面上会出现乱码def hello_world(request, *args, **kwargs): data = {'code': 0, "content": "返回中文字符串", "err_msg": ""} return JsonResponse(data)# 经过处理后的JsonResponsedef hello_world(request, *args, **kwargs): data = {'code': 0, "content": "返回中文字符串", "err_msg": ""} return JsonResponse(data, json_dumps_params={'ensure_ascii': False})请求结果:# 第一个不处理的 JsonResponse 返回[root@server ~]# curl "http://127.0.0.1:8881/hello/"{"code": 0, "content": "\u8fd4\u56de\u4e2d\u6587\u5b57\u7b26\u4e32", "err_msg": ""}# 使用第二个数据处理后的HttpResponse返回[root@server ~]# curl "http://127.0.0.1:8881/hello/"{"code": 0, "content": "返回中文字符串", "err_msg": ""}另外一种比较好的方式是,仿照 JsonResponse 类,定义一个支持返回包含中文 json 数据的 Response 类:# 忽略导入模块# 将原来支持的json_dumps_params参数固定写死成{'ensure_ascii':False}class JsonResponseCn(HttpResponse): """ 忽略注释部分内容 """ def __init__(self, data, encoder=DjangoJSONEncoder, safe=True, **kwargs): if safe and not isinstance(data, dict): raise TypeError( 'In order to allow non-dict objects to be serialized set the ' 'safe parameter to False.' ) kwargs.setdefault('content_type', 'application/json') data = json.dumps(data, cls=encoder, **{'ensure_ascii':False}) super().__init__(content=data, **kwargs)这样处理后,我们在和原来一样使用 JsonResponseCn 类来返回 json 数据即可,不用考虑返回的字典数据中是否包含中文字符:def hello_world(request, *args, **kwargs): data = {'code': 0, "content": "返回中文字符串", "err_msg": ""} return JsonResponseCn(data)
- 3.3 返回 JSON 格式的数据 客户端访问操作资源的 URI 时,服务端返回 JSON 格式的数据。例如:1. 获取特定的主题客户端获取 id 为 123 的主题信息,发出如下请求:GET /topics/123服务端返回 JSON 格式的数据:{ "title": "今天吃什么?", "content": "谢谢"}在返回的 JSON 数据中, title 表示主题的标题,content 表示主题的正文。2. 获取所有的主题客户端获取所有的主题信息,发出如下请求:GET /topics服务端返回 JSON 格式的数据:[ { "title": "今天吃什么?", "content": "谢谢" }, { "title": "今天下雨吗?", "content": "有谁知道" }] 返回的 JSON 数据是一个数组,数组包含 2 项元素,每个元素表示一个主题。
- 5. 解析 json 数据 编写web api,在写 post 请求接口时,通常将接口参数以 json 格式发送给服务端,request.json 保存了请求中的 json 数据,下面编写一个例子 request-json.py 解析 json 数据:from flask import Flask, requestapp = Flask(__name__)@app.route('/')def root(): file = open('api.html', encoding = 'utf-8') return file.read()@app.route('/api/addUser', methods = ['POST'])def addUser(): json = request.json print('JSON', json) print('name = %s' % json['name']) print('age = %s' % json['age']) return 'addUser OK'if __name__ == '__main__': app.run(debug = True)在第 4 行,编写路径 / 的处理函数 root(),它读取文件 api.html,将内容返回给浏览器。在第 9 行,编写路径 /api/addUser 的处理函数 addUser(),打印 request.json 中的参数 name 和 age,返回给浏览器 ‘addUser OK’。客户端使用 POST 方法提交请求 /api/addUser,在 Flask 中,需要指明 methods 为 ‘POST’。路径 / 返回 api.html,api.html 通过 ajax 调用服务端的 /api/addUser,内容如下:<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.0/jquery.js"></script><h1 id='result'>result</h1><script>var data = JSON.stringify({'name':'zhangsan', 'age':'20'});$.ajax({ url: '/api/addUser', type: 'post', contentType:'application/json', data: data, success: function(data) { $("#result").html(data); }, error: function(e) { alert('ERROR') }});</script>在第 2 行,定义 id 为 result 的标签,用于显示调用结果;在第 4 行,设定 /api/addUser 的接口参数: name 和 age;在第 5 行,通过 jquery.ajax 调用服务端的 /api/addUser。请求调用成功时,回调 success 函数,将结果显示在 id 为 result 的标签中,如下所示:
- 5. CORS 跨域介绍 跨域实际上源自浏览器的同源策略,所谓同源,指的是协议、域名、端口都相同的源(域)。浏览器会阻止一个域的 JavaScript 脚本向另一个不同的域发出的请求,这也是为了保护浏览器的安全。在上面的例子中,发起请求的网页与请求资源的 URL 协议、域名、端口均不同,所以该请求就被浏览器阻止了。CORS 的意思就是跨域资源共享,是一种允许跨域 HTTP 请求的机制,在这种情况下我们就要想办法实现 CORS 跨域了。
ajax跨域返回json相关搜索
-
ajax
android
a href
abap
abap开发
abort
absolutelayout
abstractmethoderror
abstracttablemodel
accept
access
access教程
accordion
accumulate
acess
action
actionform
actionlistener
activity
addeventlistener