跨域的方式有多种今天我呢,给大家带来的是JSONP接口的操作和接口

JSONP的接口到处都有

今天先拿BOOS直聘的来给大家演示一遍吧

首先找到boss官网:https://www.zhipin.com/

步骤一:然后打开控制台找到network面板;

步骤二:清空

步骤三:在搜索框内输入一点文字,然后注意network面板

步骤四:找到xhr类型数据请求,当然不一定只是xhr,也有可能是script或其他

步骤五:点击其中一个

步骤六:找到 request url 后面的地址

拿到这个接口你就得去尝试慢慢得删掉点东西,看能不能更精简,这样你会看得更舒服;使用起来也是更加得如鱼得水,而后你要测试他是不是JSONP格式的

先说说JSONP是怎么产生的:

1、一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一律不准

2、不过我们又发现,Web页面上调用js文件时则不受是否跨域的影响(不仅如此,我们还发现凡是拥有"src"这个属性的标签都拥有跨域的能力,比如<script>、<img>);

3、于是可以判断,当前阶段如果想通过纯web端(ActiveX控件、服务端代理、属于未来的HTML5之Websocket等方式不算)跨域访问数据就只有一种可能,那就是在远程服务器上设法把数据装进js格式的文件里,供客户端调用和进一步处理;

4、恰巧我们已经知道有一种叫做JSON的纯字符数据格式可以简洁的描述复杂数据,更妙的是JSON还被js原生支持,所以在客户端几乎可以随心所欲的处理这种格式的数据;

5、这样子解决方案就呼之欲出了,web客户端通过与调用脚本一模一样的方式,来调用跨域服务器上动态生成的js格式文件(一般以JSON为后缀),显而易见,服务器之所以要动态生成JSON文件,目的就在于把客户端需要的数据装入进去。

6、客户端在对JSON文件调用成功之后,也就获得了自己所需的数据,剩下的就是按照自己需求进行处理和展现了,这种获取远程数据的方式看起来非常像AJAX,但其实并不一样。

7、为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。

扯了这么多,再来点实际的吧

以下案例是刚刚随便找的几个做得玩一玩

这个是百度天气接口

CSS

		<style>
div{
width: 900px;
margin: 0 auto;
background-color: skyblue;
padding: 50px 0;
text-align: center;
}
table{
border-collapse: collapse;
width: 800px;
margin: 0 auto;
}
thead tr{
background-color: #ccc;
}
input{
width: 796px;
height: 30px;
display: block;
margin: 0 auto;
outline: none;
font-size: 14px;
}
tbody td{
text-align: center;
}
</style>

  

 HTML

<div>
<h1>天气预报查询</h1>
<input type="text" name="" id="" value="" placeholder="输入你要查询的城市,按Enter执行.... "/>
<table border="1">
<thead>
<tr>
<th>日期</th>
<th>天气</th>
<th>风向</th>
<th>温度</th>
</tr>
</thead>
<tbody> </tbody>
</table>
</div>

  JavaScript

<script type="text/javascript">
var ipt = document.getElementsByTagName("input")[0];
var tbody = document.getElementsByTagName("tbody")[0];
ipt.onkeyup= function(event){
if(event.keyCode ===13){
// alert(ipt.value)
var script= document.createElement("script");
script.src="https://api.asilu.com/weather/?city="+ipt.value+"&callback=fn";
document.body.appendChild(script);
document.body.removeChild(script);
}
}
function fn(data){
var str = "";
for(var i=0;i<data.weather.length;i++){
str += "<tr>\
<td>"+data.weather[i].date+"</td>\
<td>"+data.weather[i].weather+"</td>\
<td>"+data.weather[i].wind+"</td>\
<td>"+data.weather[i].temp+"</td>\
</tr>";
}
tbody.innerHTML = str; } </script>

  

更多接口请看以下链接(控制台里面看字段详细情况):

天气:http://www.lovemysoul.vip/API/API-TQ.html

IP查询:http://www.lovemysoul.vip/API/API-IP.html

身份证查询:http://www.lovemysoul.vip/API/API-SFZ.html

手机归属地:http://www.lovemysoul.vip/API/API-gsd.html

翻译:http://www.lovemysoul.vip/API/API-FY.html

如若觉得本文有任何技术问题或是措辞问题各种问题都可以直接评论哦

JSONP以及端口的更多相关文章

  1. 实例操作JSONP原理

    絮语:按这个步骤走,你就会明白JSONP是什么鬼. 1.工程目录: ng-mywork demo.html test.js 2.nginx的server配置 server { listen ; ser ...

  2. 疯狂的JSONP

    何为跨域?何为JSONP?JSONP技术能实现什么?是否有必要使用JSONP技术? 跨域 就是由于JavaScript同源策略的限制,使得a.com域名下的js无法操作b.com或c.a.com域名下 ...

  3. 通过扩展让ASP.NET Web API支持JSONP

    同源策略(Same Origin Policy)的存在导致了"源"自A的脚本只能操作"同源"页面的DOM,"跨源"操作来源于B的页面将会被拒 ...

  4. 跨域的jsonP

    1.出现原因:因为web中的同源策略(域名,协议,端口号)限制了跨域访问.   2.区别于json (个人理解)json是数据交换格式,jsonp是数据通信中的交互方式   3.jsonp的get与p ...

  5. 原生JS封装Ajax插件(同域&&jsonp跨域)

    抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...

  6. 说一说javascript跨域和jsonp

    同源策略 在浏览器的安全策略中“同源策略”非常如雷贯耳,说的是协议.域名.端口相同则视为同源,域名也可换成IP地址,不同源的页面脚本不能获取对方的数据. 要是想使用XMLHttpRequest或者常规 ...

  7. 使用XHR2或Jsonp实现跨域以及实现原理

    我们直接使用XMLHttpRequset请求外部接口 会发现 报这个错误 其实浏览器成功发送请求并拿回了数据  只是浏览器的同源策略 禁止了获取  在xhr2 服务器端支持跨域 需要在响应头增加 Ac ...

  8. Ajax操作如何实现跨域请求 (JSONP和CORS实现Ajax跨域的原理)

    由于浏览器存在同源策略机制,同源策略阻止ajax (XMLHttpRequest) 从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性. 特别的:由于同源策略是浏览器的限制,所以请求的发送和响 ...

  9. 深入理解jsonp跨域请求原理

    在进行网站开发的过程中经常会用到第三方的数据,但是由于同源策略的限制导致ajax不能发送请求,因此也无法获得数据.解决ajax的跨域问题有两种方法: 一.jsop 二.XMLHttpRequest2中 ...

随机推荐

  1. Day9 轨道角动量

    转自中山大学电子与信息工程 http://seit.sysu.edu.cn/node/1004 能量.动量(角动量和线动量)光子的基本属性,其中光子角动量包括自旋角动量和轨道角动量(Orbital a ...

  2. java基础-03基本语法

    关键词 常用关键字53个(含2个保留字): 1.保留关键字(2个) const --常量 常数:用于修改字段或局部变量的声明. goto--转到 指定跳转到标签,找到标签后,程序将处理从下一行开始的命 ...

  3. c#枚举位运算操作

    抛出预设问题 需要有一个npc需要在一周中的,周一,周二,周三会出现,其他时间不可见 解决问题 因为一周时间是固定的,所以创建枚举类型比较合适,如下 enum Days { None, Sunday, ...

  4. Linux下网络配置与修改Centos7为列

    一.基础知识 手动绑定: 命令 一般是临时的修改,重启后失效,如:ifconfig.route.ip addr等. 修改配置文件 修改文件配置,永久有效,但是可能不能立即生效,需要重启服务 (serv ...

  5. 石家庄地铁系统开发(java web版)(一)

    今天所完成的任务: 在Mysql数据库中创建了sjzsubstop表和sjzsubway表 sjzsubstop表用于录入所有站点名称和与之对应的stopid(作为主码) sjzsubway表用于录入 ...

  6. P2801 教主的魔法(分块入门)

    两个月之前听yyr学长讲的分块,感觉是个很神奇的暴力,但到现在还是懵的一匹 #include<bits/stdc++.h> using namespace std; ; int belon ...

  7. vedio-js的视频插件用法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. css块居中

    1.已知宽高的块级元素居中: 2.未知宽高的块级元素居中:

  9. Linux 下安装idea,提示svn版本太低问题

    在 RedHat 6.5 虚拟机上装了 Idea 2017, 将项目代码从 Windows 共享到虚拟机中,然后 Idea 提示 svn 版本太旧, 上网查资料说 Idea 2018 不支持1.7以下 ...

  10. Java 8 特性 —— lambda 表达式

    Lambda 表达式 Lambda表达式本质上是一个匿名方法.常见的一个例子是,在 IDEA + JDK8 的环境下按照Java传统的语法规则编写一个线程: new Thread(new Runnab ...