在需要访问不同域的接口的数据的时候,一般有两种方式:

第一种:

使用requests模块,在业务逻辑中直接访问别的域的接口,获取数据,然后将返回的数据显示到前端页面上;

这个时候,数据访问的流程是:  客户端-->server请求其他域的接口--->server接收返回的数据--->将数据显示在前端或其他任意地方

import requests

def req(request):
response = requests.get('http://php.weather.sina.com.cn/xml.php?city=%B1%B1%BE%A9&password=DJOYnieT8234jlsK&day=0')
# print(response.content) #字节
response.encoding = 'utf-8'
# print(response.text) #字符串
return render(request,'req.html',{'result':response.text})

前端获取接收的字符串如下,是utf-8编码格式的

第二种:

直接使用js在前端页面请求其他域的接口,获取数据,最长用的是jsonp;

jsonp请求的原理:浏览器具有同源策略,对于ajax请求,不接受不同域的数据,而对于script标签没有此约束,在创建script标签的src属性的时候,页面在加载src的链接的时候,也会执行(发送链接的请求)链接的地址,如果链接是http get的接口,会返回对应的数据,这样就实现了获取不同域的接口数据的目的了;

需要注意的是:接口返回的数据,一定要符合js格式,否则数据没有办法被处理,一般我们在src的get请求链接,会携带参数?callback=list,使用callback表示需要被返回的数据的格式,这样就可以在定义专门处理返回的数据的方法了; jsonp只能发送get请求,不能发送其他的请求;

1、使用XMLhttprequest对象发送jsonp请求;

    <h1>后台获取的结果</h1>
{{ result }}
<h1>js获取的结果</h1>
<input type="button" value="获取数据" onclick="getContent();">
<div id="container"></div>
<script>
function getContent() {
/*
var xhr = new XMLHttpRequest();
xhr.open('GET','http://php.weather.sina.com.cn/xml.php?city=%B1%B1%BE%A9&password=DJOYnieT8234jlsK&day=0');
xhr.onreadystatechange = function () {
console.log(xhr.responseText);
};
xhr.send()
*/
var tag = document.createElement('script');
tag.src = 'http://www.jxntv.cn/data/jmd-jxtv2.html?callback=list_=145376870403'; //在创建src属性的时候,就会发送请求
document.head.appendChild(tag); //加载完script之后,再删除
document.head.removeChild(tag);
} function list(arg) {
console.log(arg);
}
</script>

使用jquery+jsonp请求数据如下,效果和上面的代码相同:

        function list(arg) {
console.log(arg);
} function getContent() {
$.ajax({
url : 'http://www.jxntv.cn/data/jmd-jxtv2.html?callback=list_=145376870403',
type : 'POST', //所有的jsonp都是get请求,即使是post请求,也会转换为get请求;
dataType: 'jsonp',
jsonp: 'callback',
jsonpCallback:'list'
})
}

获取数据如下:

第三种:

cors:跨域资源共享,就是在server端设置响应头来实现的;

参考博客:http://www.cnblogs.com/wupeiqi/articles/5703697.html

请求不同域的数据方法:requests Jsonp cors的更多相关文章

  1. 跨域问题及其解决方法(JSONP&CORS)

    一.什么是跨域 当a.qq.com域名下的页⾯或脚本试图去请求b.qq.com域名下的资源时,就是典型的跨域行为.跨域的定义从受限范围可以分为两种,⼴义跨域和狭义跨域. (一)广义跨域 ⼴义跨域通常包 ...

  2. 解决Ajax同源政策的方法【JSONP + CORS + 服务器端解决方案】

    解决Ajax同源政策的方法 使用JSONP解决同源限制问题 jsonp是json with padding的缩写,它不属于Ajax请求,但它可以模以Ajax请求.\ 步骤 1.将不同源的服务器端请求地 ...

  3. express 请求跨域后端解决方法CORS

    CORS全称Cross-Origin Resource Sharing,是HTML5规范定义的如何跨域访问资源. Origin表示本域,也就是浏览器当前页面的域.当JavaScript向外域(如sin ...

  4. html Js跨域提交数据方法,跨域提交数据后台获取不到数据

    MVC实现方式:(后台获取不到方法请参考下面js) [ActionAllowOrigin][HttpPost]public JsonResult Cooperation() { return json ...

  5. easy ui Tree请求跨域数据

    扯淡篇: jQuery EasyUI为提供了大多数UI控件的使用,如:accordion,combobox,menu,dialog,tabs,validatebox,datagrid,window,t ...

  6. jquery的ajax异步请求接收返回json数据

    http://www.jb51.net/article/51122.htm jquery的ajax异步请求接收返回json数据方法设置简单,一个是服务器处理程序是返回json数据,另一种就是ajax发 ...

  7. web三种跨域请求数据方法

    以下测试代码使用php,浏览器测试使用IE9,chrome,firefox,safari <!DOCTYPE HTML> <html> <head>     < ...

  8. JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  9. 【转】JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

随机推荐

  1. componentWillMount和componentDidMount的区别

    1.componentWillMount  将要装载,在render之前调用: componentDidMount,(装载完成),在render之后调用 2.componentWillMount  每 ...

  2. Power BI Desktop 新年快乐!

    新年快乐 2018年是Power BI 多产的一年!更新发布的功能就超过150多个,真是相当的强大! 为了庆祝这一成功的一年,Power BI官方团队制作了一个有趣的视频,展示他们对2018年最喜欢的 ...

  3. 苹果pns推送和唤醒

    使用的是苹果自己的推送服务器 certificatePath 推送证书 VoipcertificatePath 唤醒证书 certificatePassword 证书密码 以上三项都是需要使用上架了A ...

  4. Python全栈之路----递归

    alex博客中递归的博文     我之前确实没讲明白递归这个东西 递归就是在函数的运行过程中调用自己. 但递归不断调用自己是有限度的,默认限度为1000.函数不断被压进栈,当超过递归限度时会造成栈溢出 ...

  5. alpha冲刺(6/10)

    前言 队名:旅法师 作业链接 队长博客 燃尽图 会议 会议照片 会议内容 陈晓彬(组长) 今日进展: 召开会议 撰写博客 召集大家分析了一下后续的问题 问题困扰: 工程量太大,这周考试又很多,周末我让 ...

  6. 安装ucenter以及单点实现

    1.下载ucenter包 最好是utf-8格式2.解压得到4个安装包 3.1)新建一个站点c 把upload中的所有文件复制到站点根目录下中2)访问出现 Please click here to in ...

  7. pytorch基础

    1.创建一个未初始化矩阵 from __future__ import print_function import torch x = torch.empty(2,3)#uninitialized m ...

  8. Pycharm自动添加文件头

    Pycharm自动添加文件头 在编程的时候,我们往往需要在文件头里添加一些编码和作者信息,在Pycharm中,系统给我们自带了这一功能,可以做如下设置: 打开设置 在设置中找到如下选项: 然后在编辑框 ...

  9. PythonStudy——函数的返回值 The return value of the function

    # 在函数体中,通过return关键词返回函数的内部数据给外部 """# 一.作用# return作用:1.结束函数:2.将函数的内部数据返回给外部 def fn(): ...

  10. 冒号课堂 编程范式与OOP思想

    上篇:编程范式与编程语言 第1课 开班导言 第2课 重要范式 第3课 常用范式 第4课 重温范式 第5课 语言小谈 第6课 语言简评 下篇:抽象机制与对象范式 第7课 抽象封装 第8课 抽象接口 第9 ...