`
阅读更多

我们经常遇到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格式数据。

 

 

 

2
5
分享到:
评论

相关推荐

    自己封装jsonp.js

    自己封装jsonp.js

    vue中利用Promise封装jsonp并调取数据

    Promise就是一个给一步操作提供的容器,在这个容器里,有两个阶段无法改变的阶段,这两个阶段在文中给大家提到。对vue中利用Promise封装jsonp并调取数据 的相关知识感兴趣的朋友,跟随小编一起看看吧

    解决跨域封装的jsonp.js文件

    解决跨域封装的jsonp

    vue2.0Jsonp

    这里提到的是通过 GitHub 引入 JSONP 库,并结合 Promise 进行封装,使得代码更易于理解和管理。Promise 是 ES6 引入的一种异步编程解决方案,它可以更好地处理回调地狱,使代码结构更加清晰。 首先,我们需要安装...

    跨域jsonp资料包.zip

    - 为提高代码可维护性,可以封装JSONP函数,以便在多个地方复用。 在"跨域jsonp资料包"中,可能包含详细的JSONP实例、示例代码、实战教程等内容,可以帮助开发者深入理解和应用JSONP。通过学习这个资料包,你可以更...

    封装好的jsonp.js

    封装好的jsonp.js

    使用原生js封装的ajax实例(兼容jsonp)

    在本文中,我们将深入探讨如何使用原生JavaScript封装一个AJAX(Asynchronous JavaScript and XML)函数,并且这个函数会兼容JSONP(JSON with Padding)模式。AJAX是一种在不刷新整个页面的情况下与服务器交换数据...

    JSONP原理及简单实现

    在封装JSONP实现时,要注意脚本加载完毕后需要清理操作,比如从全局作用域中删除回调函数,移除标签等,以避免对页面其他部分产生影响。另外,由于JSONP的请求是通过插入标签的方式执行的,所以它不能用于GET请求...

    VUE2.0中Jsonp的使用方法

    封装jsonp.js 创建`jsonp.js`文件进行封装,以支持Promise接口。引入原生的`jsonp`库,创建一个新的`jsonp`函数,它接受URL、数据和选项作为参数,并返回一个Promise对象。成功时解析数据,失败时返回错误。 ```...

    使用jsonp实现跨域获取数据实例讲解

    首先,我们定义了一个名为`jsonp`的函数,用于封装JSONP请求的过程。这个函数接收三个参数:`url`(请求的API地址),`data`(需要传递的参数),以及`callback`(回调函数)。下面是`jsonp`函数内部的主要步骤解释...

    jsonp原理.txt

    jQuery通过其强大的封装简化了JSONP的使用过程。当设置`dataType: 'jsonp'`时,jQuery内部自动完成了上述步骤。 1. **生成回调函数**:jQuery自动生成一个唯一名称的回调函数,并将该函数名附加到请求的URL中作为`...

    JSONP解决跨域问题

    总结来说,JSONP是一种解决跨域问题的技术,通过将数据封装在JavaScript函数调用中,使得前端能够跨越同源策略的限制获取到服务端的数据。在C# Web Service中实现JSONP,需要创建支持回调的Web方法并设置适当的响应...

    Jsonp和java操作

    - 服务器接收请求,根据请求中的回调函数名生成JSON数据,并封装成JavaScript函数调用,如`jsonpCallback({"key":"value"})`。 - 服务器将封装后的JavaScript代码作为响应内容返回给客户端。 - 浏览器解析`...

    js跨域jsonp的使用

    这个文件实际上是一个函数调用,参数是封装在JSON格式中的数据。 4. **执行回调函数**:当浏览器下载并执行这个动态生成的JavaScript文件时,`handleData`函数被调用,传入的数据被解析并处理。 ### JSONP 的优...

    jsonp源码以及jar包

    JSONP(JSON with Padding)是一种跨域数据交互协议,它的基本思想是利用JavaScript函数调用的特性,将数据封装在函数调用中,从而绕过浏览器的同源策略限制。在网页开发中,如果你需要从一个不同的域名下获取数据,...

    sso-jsonp-demo

    3. "A项目"保存这个Token,同时将Token和回调函数名一起封装成请求,通过JSONP的方式发送给"B项目"。 4. "B项目"接收到请求后,验证Token的有效性,如果有效,则认为用户已登录,更新本地状态。 5. 用户访问"B项目...

    jsonp.pdf文件

    - 处理完毕后,将数据以JSON格式封装,并通过回调函数返回。 **示例代码**: - **客户端**: ```javascript function handleResponse(data) { alert(data); } var script = document.createElement('script'...

    vue项目中jsonp跨域获取qq音乐首页推荐问题

    2. **封装JSONP**: 引入`jsonp`库,然后进行封装。创建一个`jsonp.js`文件,如下: ```javascript import originJSONP from 'jsonp' export default function jsonp(url, data, option) { url += (url.index...

    jquery-jsonp-master.zip_jsonp

    JSONP利用这一点,服务器将数据封装在一个JavaScript函数调用中返回,客户端通过动态创建`&lt;script&gt;`标签来加载这个函数并执行,从而实现跨域数据交互。 在jQuery中,使用JSONP主要通过`$.ajax()`或`$.getJSON()`...

Global site tag (gtag.js) - Google Analytics