我们经常遇到JS 跨域的问题,跨域的解决方案有很多,JSONP是非常常用的跨域解决方案,这里封装了一下JSONP:
function getJSONP(url, callback) { if (!url) { return; } var a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']; //定义一个数组以便产生随机函数名 var r1 = Math.floor(Math.random() * 10); var r2 = Math.floor(Math.random() * 10); var r3 = Math.floor(Math.random() * 10); var name = 'getJSONP' + a[r1] + a[r2] + a[r3]; var cbname = 'getJSONP.' + name; //作为jsonp函数的属性 if (url.indexOf('?') === -1) { url += '?jsonp=' + cbname; } else { url += '&jsonp=' + cbname; } var script = document.createElement('script'); //定义被脚本执行的回调函数 getJSONP[name] = function (e) { try { //alert(e.name); callback && callback(e); } catch (e) { // } finally { //最后删除该函数与script元素 delete getJSOP[name]; script.parentNode.removeChild(script); } } script.src = url; document.getElementsByTagName('head')[0].appendChild(script); } getJSONP('http://localhost:8888/',function(response){ alert(response.name); });
服务器端代码:
<?php echo $_GET['jsonp']."({name:'Hi,Kingwell,I come from China',age:20})"; ?>
注:服务器端代码必须是函数名加括号格式,括号里就是JSON格式数据。
相关推荐
自己封装jsonp.js
Promise就是一个给一步操作提供的容器,在这个容器里,有两个阶段无法改变的阶段,这两个阶段在文中给大家提到。对vue中利用Promise封装jsonp并调取数据 的相关知识感兴趣的朋友,跟随小编一起看看吧
解决跨域封装的jsonp
这里提到的是通过 GitHub 引入 JSONP 库,并结合 Promise 进行封装,使得代码更易于理解和管理。Promise 是 ES6 引入的一种异步编程解决方案,它可以更好地处理回调地狱,使代码结构更加清晰。 首先,我们需要安装...
- 为提高代码可维护性,可以封装JSONP函数,以便在多个地方复用。 在"跨域jsonp资料包"中,可能包含详细的JSONP实例、示例代码、实战教程等内容,可以帮助开发者深入理解和应用JSONP。通过学习这个资料包,你可以更...
封装好的jsonp.js
在本文中,我们将深入探讨如何使用原生JavaScript封装一个AJAX(Asynchronous JavaScript and XML)函数,并且这个函数会兼容JSONP(JSON with Padding)模式。AJAX是一种在不刷新整个页面的情况下与服务器交换数据...
在封装JSONP实现时,要注意脚本加载完毕后需要清理操作,比如从全局作用域中删除回调函数,移除标签等,以避免对页面其他部分产生影响。另外,由于JSONP的请求是通过插入标签的方式执行的,所以它不能用于GET请求...
封装jsonp.js 创建`jsonp.js`文件进行封装,以支持Promise接口。引入原生的`jsonp`库,创建一个新的`jsonp`函数,它接受URL、数据和选项作为参数,并返回一个Promise对象。成功时解析数据,失败时返回错误。 ```...
首先,我们定义了一个名为`jsonp`的函数,用于封装JSONP请求的过程。这个函数接收三个参数:`url`(请求的API地址),`data`(需要传递的参数),以及`callback`(回调函数)。下面是`jsonp`函数内部的主要步骤解释...
jQuery通过其强大的封装简化了JSONP的使用过程。当设置`dataType: 'jsonp'`时,jQuery内部自动完成了上述步骤。 1. **生成回调函数**:jQuery自动生成一个唯一名称的回调函数,并将该函数名附加到请求的URL中作为`...
总结来说,JSONP是一种解决跨域问题的技术,通过将数据封装在JavaScript函数调用中,使得前端能够跨越同源策略的限制获取到服务端的数据。在C# Web Service中实现JSONP,需要创建支持回调的Web方法并设置适当的响应...
- 服务器接收请求,根据请求中的回调函数名生成JSON数据,并封装成JavaScript函数调用,如`jsonpCallback({"key":"value"})`。 - 服务器将封装后的JavaScript代码作为响应内容返回给客户端。 - 浏览器解析`...
这个文件实际上是一个函数调用,参数是封装在JSON格式中的数据。 4. **执行回调函数**:当浏览器下载并执行这个动态生成的JavaScript文件时,`handleData`函数被调用,传入的数据被解析并处理。 ### JSONP 的优...
JSONP(JSON with Padding)是一种跨域数据交互协议,它的基本思想是利用JavaScript函数调用的特性,将数据封装在函数调用中,从而绕过浏览器的同源策略限制。在网页开发中,如果你需要从一个不同的域名下获取数据,...
3. "A项目"保存这个Token,同时将Token和回调函数名一起封装成请求,通过JSONP的方式发送给"B项目"。 4. "B项目"接收到请求后,验证Token的有效性,如果有效,则认为用户已登录,更新本地状态。 5. 用户访问"B项目...
- 处理完毕后,将数据以JSON格式封装,并通过回调函数返回。 **示例代码**: - **客户端**: ```javascript function handleResponse(data) { alert(data); } var script = document.createElement('script'...
2. **封装JSONP**: 引入`jsonp`库,然后进行封装。创建一个`jsonp.js`文件,如下: ```javascript import originJSONP from 'jsonp' export default function jsonp(url, data, option) { url += (url.index...
JSONP利用这一点,服务器将数据封装在一个JavaScript函数调用中返回,客户端通过动态创建`<script>`标签来加载这个函数并执行,从而实现跨域数据交互。 在jQuery中,使用JSONP主要通过`$.ajax()`或`$.getJSON()`...