JavaScript手动实现JSONP代码

浏览器的同源策略不允许我们直接通过ajax call别的域名上的url,但是script,img标签却米有这个限制,jsonp便是利用了这一点,通过在页面上生成一个src为我们所要调用url的script标签,能拿到服务器返回的结果,当然这个只支持get请求,同样,服务器端也要能够接受我们所传递的参数。

下面是一个例子:

<script>

function removeScript(scriptId) {
  const script = document.getElementById(scriptId);
  document.getElementsByTagName(‘head‘)[0].removeChild(script);
}

function clearFunction(functionName) {
  try {
    delete window[functionName]; //IE8下直接删除会报错
  } catch (e) {
    window[functionName] = undefined;
  }
}

function call(url) {
    var callbackFunction = Math.ceil(Math.random() * 100000 );
    url += (url.indexOf(‘?‘) === -1) ? ‘?‘ : ‘&‘;
    var jsonpScript = document.createElement(‘script‘);
    jsonpScript.setAttribute(‘src‘, `${url}callabck=${callbackFunction}`);
    jsonpScript.id = scriptId;
    document.getElementsByTagName(‘head‘)[0].appendChild(jsonpScript);

    window[callbackFunction] = function(data) {
        //在这里处理数据,然后最后记得一定要删除script并且将函数从window对象上删除掉。
       //Handling data...
        removeScript(scriptId);
        clearFunction(callbackFunction);
    }
}

</script>
时间: 2024-10-05 07:53:48

JavaScript手动实现JSONP代码的相关文章

js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)

最近做了一个项目,需要用子域名调用主域名下的一个现有的功能,于是想到了用jsonp来解决,在我们平常的项目中不乏有这种需求的朋友,于是记录下来以便以后查阅同时也希望能帮到大家,需要了解的朋友可以参考下 很庆幸,我又见到了末日后新升的太阳,所以我还能在这里写文章,言归正传哈,最近做了一个项目,需要用子域名调用主域名下的一个现有的功能,于是想到了用jsonp来解决,在我们平常的项目中不乏有这种需求的朋友,于是记录下来以便以后查阅同时也希望能帮到大家. 什么是JSONP协议? JSONP即JSON w

Web API之手动实现JSONP或者安装配置Cors跨域(七)

前言 照理来说本节也应该讲Web API原理,目前已经探讨完了比较底层的Web API消息处理管道以及Web Host寄宿管道,接下来应该要触及控制器.Action方法,以及过滤器.模型绑定等等,想想也是心痛不已,水太深了,摸索原理关键是太枯燥和乏味了,但是呢,从情感上还是挺乐意去摸索原理,而情绪上不太乐意去探究原理,于是乎,本文就由此诞生了,借此文缓解下枯燥的心情和压抑的情绪.后续继续摸索原理. 接下来我们要讲的就是利用JSONP和利用Cors这两种方式来实现跨域,请看下文..... JSON

如何实现 javascript “同步”调用 app 代码

在 App 混合开发中,app 层向 js 层提供接口有两种方式,一种是同步接口,一种一异步接口(不清楚什么是同步的请看这里的讨论).为了保证 web 流畅,大部分时候,我们应该使用异步接口,但是某些情况下,我们可能更需要同步接口.同步接口的好处在于,首先 js 可以通过返回值得到执行结果:其次,在混合式开发中,app 层导出的某些 api 按照语义就应该是同步的,否则会很奇怪——一个可能在 for 循环中使用的,执行非常快的接口,比如读写某个配置项,设计成异步会很奇怪. 那么如何向 js 层导

JavaScript在线运行html代码,保存html代码到本地

在网页中看到一些html代码却不知这样的代码运行起来是什么样子?觉得一些模板代码不错还要手动复制,新建文件,粘贴嫌麻烦?下面的js方法可以帮你解决这些问题. <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JavaScript在线运行html代码,保存html代码到本地</title> </head> <body> &l

javascript实现的分页代码实例

javascript实现的分页代码实例: 下面是一段javascript实现的分页代码,当然必须要结合后台代码实现.大家可以自行分析一下代码,希望能够给大家带来一定的帮助,代码如下: <script type="text/javascript"> function setPage(opt) { if(!opt.pageDivId || opt.allPageNum < opt.curpageNum || opt.allPageNum < opt.showPage

Javascript加入收藏夹代码

Javascript加入收藏夹代码, 这个js代码支持firefox浏览器很是难得, 支持Firefox的加入收藏夹JS代码.www.mlyrx120.com 具体信息你可以这么写: 点击即可把你的网站添加到浏览器的收藏菜单下 加入收藏夹 将xxx网站加入收藏夹 收藏本网站 留下网站 怎么写才能让别人加入收藏夹,就要看你的本事了 把ijavascript.cn加入收藏 下面这个也是Javascript加入收藏夹代码,同样支持firefox 页面使用:rl.82676666.com 添加到收藏

只需手动增加一行代码即可让Laravel4运行在SAE

Github:https://github.com/chariothy/laravel4-sae laravel4-sae 只需手动增加一行代码即可让Laravel4(~4.2)运行在SAE,而且在本地和在SAE开发无需命令切换,自动判断环境并切换配置. 安装 在SAE安装Laravel 在SAE安装Laravel与本地环境安装稍有区别: 在SAE的"应用管理"中新建一个没有代码的应用,比如叫project-name(这里面只是便于举例,实际上SAE不允许用字符'-'): 用svn将其

javascript实现的验证码代码实例

javascript实现的验证码代码实例:验证码大家应该不陌生,主要是为了网站的安全性,防止恶意注册和登陆.验证码实现的方式各有不同,下面是一段用javascript实现的验证码效果,供大家参考之用,希望能够给大家带来帮助.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="ht

javascript获取url参数代码实例

javascript获取url参数代码实例: 有时候可能需要获取url中的参数值,下面是一段相关的代码实例. 代码如下: var url="www.softwhy.com/test.php?id=21&a=5"; if(url.indexOf("?")!=-1) { var p=url.indexOf("?"); //返回所在位置 var str = url.substr(p+1) //从这个位置开始截取 strs = str.split