jQuery的getJSON如何实现跨域请求的深层原理是什么?

2026-04-03 01:091阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计560个文字,预计阅读时间需要3分钟。

jQuery的getJSON如何实现跨域请求的深层原理是什么?

最近我开发了一个工具,其中有一个功能是获取当前页面的短网址。这个想法很好,可以在我需要快速分享页面链接时使用,特别是在需要跨域操作的时候。最初的想法就是实现跨域的最简单方法。

前几天我在开发一个工具的时候,其中有个功能就是获取本页面的短网址。

这个想法是好的,可是在我付诸于行动的时候,发现这个需要跨域。

jQuery的getJSON如何实现跨域请求的深层原理是什么?

起初我的想法就是,跨域的最简单的方法就是增加一个script标签,因为script标签是允许跨域的。

但是问题又来了,对方的API返回的是个json对象,用script标签只能执行,却不能获取到里面的东西,也就是说返回的东西是不可控的。

随后我就想到了jQuery中的getJSON的方法,学习了一下,没想到里面的文章这么大。

jQuery非常聪明,他也意识到只靠script请求是无法接受到返回的东西的,所以他就设计了一个全局的callback函数,发送请求的时候把这个callback函数也传进去。

服务器判断是否有这个callback函数,如果没有就返回一个对象,如果有就返回一个函数名(对象)。

我们可以通过下面这个地址来看一下

to.ly/api.php?json=1&longurl=to.ly/api.php?json=1&longurl=to.ly/api.php?json=1&longurl='+encodeURIComponent('www.skiyo.cn/'), function(data){ alert(data.shorturl); }); }, getJSON : function(url, callback) { var c = this.callback; url = url + "&callback=" + c; // Handle JSONP-style loading //将函数名设置为window的一个方法,这样此方法就是全局的了. window[ c ] = window[ c ] || function( data ) { //调用匿名函数 callback(data); // Garbage collect window[ c ] = undefined; try { delete window[ c ]; } catch(e) {} if ( head ) { head.removeChild( script ); } }; var head = document.getElementsByTagName("head")[0] || document.documentElement; var script = document.createElement("script"); script.src = url; // Handle Script loading var done = false; // Attach handlers for all browsers script.onload = script.onreadystatechange = function() { if ( !done && (!this.readyState this.readyState === "loaded" || this.readyState === "complete") ) { done = true; // Handle memory leak in IE script.onload = script.onreadystatechange = null; if ( head && script.parentNode ) { head.removeChild( script ); } } }; head.insertBefore( script, head.firstChild ); }, }; //go cross.init(); })();

总结

到此这篇关于jQuery中getJSON跨域原理的文章就介绍到这了,更多相关jQuery getJSON跨域原理内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

标签:深入讲解

本文共计560个文字,预计阅读时间需要3分钟。

jQuery的getJSON如何实现跨域请求的深层原理是什么?

最近我开发了一个工具,其中有一个功能是获取当前页面的短网址。这个想法很好,可以在我需要快速分享页面链接时使用,特别是在需要跨域操作的时候。最初的想法就是实现跨域的最简单方法。

前几天我在开发一个工具的时候,其中有个功能就是获取本页面的短网址。

这个想法是好的,可是在我付诸于行动的时候,发现这个需要跨域。

jQuery的getJSON如何实现跨域请求的深层原理是什么?

起初我的想法就是,跨域的最简单的方法就是增加一个script标签,因为script标签是允许跨域的。

但是问题又来了,对方的API返回的是个json对象,用script标签只能执行,却不能获取到里面的东西,也就是说返回的东西是不可控的。

随后我就想到了jQuery中的getJSON的方法,学习了一下,没想到里面的文章这么大。

jQuery非常聪明,他也意识到只靠script请求是无法接受到返回的东西的,所以他就设计了一个全局的callback函数,发送请求的时候把这个callback函数也传进去。

服务器判断是否有这个callback函数,如果没有就返回一个对象,如果有就返回一个函数名(对象)。

我们可以通过下面这个地址来看一下

to.ly/api.php?json=1&longurl=to.ly/api.php?json=1&longurl=to.ly/api.php?json=1&longurl='+encodeURIComponent('www.skiyo.cn/'), function(data){ alert(data.shorturl); }); }, getJSON : function(url, callback) { var c = this.callback; url = url + "&callback=" + c; // Handle JSONP-style loading //将函数名设置为window的一个方法,这样此方法就是全局的了. window[ c ] = window[ c ] || function( data ) { //调用匿名函数 callback(data); // Garbage collect window[ c ] = undefined; try { delete window[ c ]; } catch(e) {} if ( head ) { head.removeChild( script ); } }; var head = document.getElementsByTagName("head")[0] || document.documentElement; var script = document.createElement("script"); script.src = url; // Handle Script loading var done = false; // Attach handlers for all browsers script.onload = script.onreadystatechange = function() { if ( !done && (!this.readyState this.readyState === "loaded" || this.readyState === "complete") ) { done = true; // Handle memory leak in IE script.onload = script.onreadystatechange = null; if ( head && script.parentNode ) { head.removeChild( script ); } } }; head.insertBefore( script, head.firstChild ); }, }; //go cross.init(); })();

总结

到此这篇关于jQuery中getJSON跨域原理的文章就介绍到这了,更多相关jQuery getJSON跨域原理内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

标签:深入讲解