分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

跨域请求之jsonp的实现方式

发布时间:2023-09-06 02:16责任编辑:苏小强关键词:jsjson跨域

ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本,利用这个特性,服务端不再返回JSON格式的数据,而是返回一段调用某个函数的js代码,在src中进行了调用,这样实现了跨域。

 1 (function(){ 2 ????????????$jsonp(//地址 3 ????????????????????‘http://api.douban.com/v2/movie/in_theaters‘, 4 ????????????????????//传递的参数 5 ????????????????????{ 6 ????????????????????????count:10,start:5 7 ????????????????????}, 8 ????????????????????//回调函数 9 ????????????????????function(data){10 ????????????????????????document.getElementById(‘result‘).innerHTML=JSON.stringify(data);11 ????????????????????}12 ????????????);13 ????????})();14 15 16 ????(function(window,document){17 ????‘use strict‘;18 ????var jsonp=function(url,data,callback){19 ????????//1 挂载回调函数20 ????????var fnSuffix=Math.random().toString().replace(‘.‘,‘‘);21 ????????var cbFuncName=‘my_json_cb_‘+fnSuffix;22 ????????//将函数挂载在全局环境的方式不推荐 ?使用cbs.my_json_cb_23 ????????window[cbFuncName]=callback;24 ????????//2 将data转化成url字符串的形式25 ????????// {id:1,name:‘zhangsan‘} =>id=1&name=zhangsan26 ????????var querystring=url.indexOf(‘?‘)==-1?‘?‘:‘&‘;27 ????????for(var key in data){28 ????????????querystring+=key+‘=‘+data[key]+‘&‘;29 ????????????// ???????????id= ?????????1 ??&30 ????????}31 ????????//querystring=?id=1&name=zhangsan&32 ????????//3 处理url地址中的回调参数33 ????????//url+=callback=sdfsfdg34 ????????querystring+=‘callback=‘+cbFuncName;35 ????????//querystring=?id=1&name=zhangsan&cb=my_json_cb_023124136 ????????//4 创建一个script的标签37 ????????var scriptElement=document.createElement(‘script‘);38 ????????scriptElement.src=url+querystring;39 ????????// 此时还不能将其append到页面上40 ????????//5 将script标签放到页面中41 ????????document.body.appendChild(scriptElement);42 ????????//append过后页面会自动对这个地址发送请求,请求完成以后自动执行脚本43 44 ????};45 ????/*把jsonp放到全局*/46 ????window.$jsonp=jsonp;47 })(window,document);

缺点:只能支持GET请求而不能支持POST等其他http请求方式;它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题。

优点:支持跨域,兼容性好。。。

跨域请求之jsonp的实现方式

原文地址:https://www.cnblogs.com/layaling/p/9729552.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved