实例操作JSONP原理
絮语:按这个步骤走,你就会明白JSONP是什么鬼。
1.工程目录:
- ng-mywork
- demo.html
- test.js
2.nginx的server配置
- server {
- listen ;
- server_name scan_80;
- root E:/ng-mywork/;
- location / {
- }
- error_page /50x.html;
- location = /50x.html {
- root html;
- }
- }
- server {
- listen ;
- server_name scan_90;
- root E:/ng-mywork/;
- location / {
- }
- error_page /50x.html;
- location = /50x.html {
- root html;
- }
- }
配置了两个域名不同,端口不同的域。
不会配置?
请看:nginx+php的使用
3.get的xhr的异步请求
- //XMLHttpRequest
- // true:异步请求
- //监听onreadystatechange事件句柄
- //设置timeout,回调
- var xhr = new XMLHttpRequest();
- xhr.open('get', 'http://scan_90:90/test.js', true);
- xhr.onreadystatechange = function(){
- if(xhr.readyState === 4){
- if(xhr.status === 200){
- alert("请求成功!")
- }
- }
- }
- xhr.ontimeout = function(){
- alert("请求超时")
- }
- xhr.timeout = 1000;
- xhr.send(null);
谷歌下请求没问题,因为我设置对浏览器设置了跨域参数。
但是火狐确是不行的,因为是跨域。
4.get的xhr的同步请求
- //不能设置超时 因为系统会默认设置为0
- var xhr = new XMLHttpRequest();
- xhr.open('GET', 'http://scan_90:90/test.js', false);
- xhr.send(null);
- if(xhr.readyState === 4){
- if(xhr.status === 200){
- alert("请求成功")
- }
注意这里的超时注释,同步是不能设置的。
5.使用jsonp进行跨域解决不能跨域请求的问题
- //进行jsonp跨域请求
- var script = document.createElement('script');
- script.src = 'http://scan_90:90/test.js?callback=dothings';
- script.type = "text/javascript";
- document.body.insertBefore(script, document.body.children[0]);
请求成功了,但是好像跟我们想象的是有点区别的?因为我们常见的返回是这样的。
- dothings([1,2,3]);
- //然后我们可以调用:
- function dothings(arr){
- //....
- }
那是因为这不只是前端做的,还有服务端也需要做些修改来配合返回值。
增加php文件:
- <?php
- $callback = $_GET['callback'];
- $data = array('1','2','3');
- echo $callback.'('.json_encode($data).')';
- ?>
改下js:
- var script = document.createElement('script');
- script.src = 'http://scan_90:80/test.php?callback=dothings';
- script.type = "text/javascript";
- document.body.insertBefore(script, document.body.children[0]);
- //请求完毕后立即执行dothings
- function dothings(arr) {
- console.log(arr)
- }
OK,大功告成!
总结:jsonp的跨域使用的就是script可以跨域的特性(还有其他很多标签都可跨域,如img)。通过服务端跟前端的配合使得返回的js是我们定义的方法,以便可以在前端调用执行。
实例操作JSONP原理的更多相关文章
- 黑马vue---40、结合Node手写JSONP服务器剖析JSONP原理
黑马vue---40.结合Node手写JSONP服务器剖析JSONP原理 一.总结 一句话总结: 服务端可以返回js代码给script标签,那么标签会执行它,并且可带json字符串作为参数,这样就成功 ...
- 跟vczh看实例学编译原理——一:Tinymoe的设计哲学
自从<序>胡扯了快一个月之后,终于迎来了正片.之所以系列文章叫<看实例学编译原理>,是因为整个系列会通过带大家一步一步实现Tinymoe的过程,来介绍编译原理的一些知识点. 但 ...
- Ajax跨域:Jsonp原理解析
推荐先看下这篇文章:JS跨域(ajax跨域.iframe跨域)解决方法及原理详解(jsonp) JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重 ...
- JQuery实现Ajax跨域访问--Jsonp原理
JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略).这一策略对于Java ...
- 面试汇总——知道什么是同源策略吗?那怎么解决跨域问题?知道 JSONP 原理吗?
本文是面试汇总分支——知道什么是同源策略吗?那怎么解决跨域问题?知道 JSONP 原理吗?. 同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能, ...
- 跨域及JSONP原理
什么是跨域:a.com 域名下的js无法操作b.com或是c.a.com域名下的对象 为什么浏览器要引入跨域问题? 跨域问题来源于浏览器的同源策略,为啥要有这个策略呢? 为了安全.假设现在有a.com ...
- ajax工作原理,Jsonp原理
Ajax工作原理是 相当于在用户和服务器之间加了-个中间层(AJAX引擎),使用户操作与服务器响应异步化. 对于用户请求ajax引擎会做一些数据验证和数据处理,不是所有请求都提交给服务器,当需要从服务 ...
- 跨域篇--JSONP原理
一篇文章让你明白 jsonp原理详解 什么是JSONP? 先说说JSONP是怎么产生的: 其实网上关于JSONP的讲解有很多,但却千篇一律,而且云里雾里,对于很多刚接触的人来讲理解起来有些困难,着用自 ...
- Java JUC之Atomic系列12大类实例讲解和原理分解
Java JUC之Atomic系列12大类实例讲解和原理分解 2013-02-21 0个评论 作者:xieyuooo 收藏 我要投稿 在java6以后我们不但接触到了Loc ...
随机推荐
- wepack+sass+vue 入门教程(一)
一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...
- 前端css兼容性与易混淆的点
一.常用的骨灰级清除浮动 .clearfix:after { content: "."; display: block; height:; clear: both; visibil ...
- 用scikit-learn进行LDA降维
在线性判别分析LDA原理总结中,我们对LDA降维的原理做了总结,这里我们就对scikit-learn中LDA的降维使用做一个总结. 1. 对scikit-learn中LDA类概述 在scikit-le ...
- ASP.NET Aries 入门开发教程2:配置出一个简单的列表页面
前言: 朋友们都期待我稳定地工作,但创业公司若要躺下,也非意念可控. 若人生注定了风雨飘摇,那就雨中前行了. 最机开始看聊新的工作机会,欢迎推荐,创业公司也可! 同时,趁着自由时间,抓紧把这系列教程给 ...
- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform
eclipse maven clean install 报错 1. 修改properties-->resource-->utf-8仍然报错 2.修改项目pom.xml文件,增加: < ...
- so 问题来了,你现在值多少钱?
年底了一大帮人都写着年底总结,总结一年做过的事.错过的事和做错的事.增长了多少本事,找没找到女朋友……来年做好升职加薪,要么做跳槽的准备,程序猿又开始浮躁了……. so 问题来了,你现在值多少钱? 这 ...
- Javascript中的valueOf与toString
基本上,javascript中所有数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题,本文将详细介绍,有需要的朋友可以参考下. t ...
- 中国CIO最关心的八大问题(下)
中国CIO最关心的八大问题(下) 从调研数据还可以看出,在企业级IT建设与投资上,CIO们并非是一群狂热的技术信徒,他们更多的是从企业发展阶段.信息化程度.技术成熟度.ROI等方面进行综合评估. 五. ...
- Linux基础介绍【第七篇】
linux用户分类 超级用户:UID=0,root 普通用户:UID 500起,由超级用户或具有超级用户权限的用户创建的用户. 虚拟用户:UID 1-499,为了满足文件或服务启动的需要而存在,一般都 ...
- 针对Linux ASP.NET MVC网站中 httpHandlers配置无效的解决方案
近期有Linux ASP.NET用户反映,在MVC网站的Web.config中添加 httpHandlers 配置用于处理自定义类型,但是在运行中并没有产生预期的效果,服务器返回了404(找不到网页) ...