激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務(wù)器之家 - 編程語言 - JavaScript - jQuery中g(shù)etJSON跨域原理的深入講解

jQuery中g(shù)etJSON跨域原理的深入講解

2021-09-07 16:52IT技術(shù)博客大學(xué)習(xí) JavaScript

這篇文章主要給大家介紹了關(guān)于jQuery中g(shù)etJSON跨域原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前幾天我在開發(fā)一個(gè)工具的時(shí)候,其中有個(gè)功能就是獲取本頁面的短網(wǎng)址。

這個(gè)想法是好的,可是在我付諸于行動(dòng)的時(shí)候,發(fā)現(xiàn)這個(gè)需要跨域。

起初我的想法就是,跨域的最簡單的方法就是增加一個(gè)script標(biāo)簽,因?yàn)閟cript標(biāo)簽是允許跨域的。

但是問題又來了,對方的API返回的是個(gè)json對象,用script標(biāo)簽只能執(zhí)行,卻不能獲取到里面的東西,也就是說返回的東西是不可控的。

隨后我就想到了jQuery中的getJSON的方法,學(xué)習(xí)了一下,沒想到里面的文章這么大。

jQuery非常聰明,他也意識到只靠script請求是無法接受到返回的東西的,所以他就設(shè)計(jì)了一個(gè)全局的callback函數(shù),發(fā)送請求的時(shí)候把這個(gè)callback函數(shù)也傳進(jìn)去。

服務(wù)器判斷是否有這個(gè)callback函數(shù),如果沒有就返回一個(gè)對象,如果有就返回一個(gè)函數(shù)名(對象)。

我們可以通過下面這個(gè)地址來看一下

http://to.ly/api.php?json=1&longurl=http%3A%2F%2Fwww.skiyo.cn

大家可以打開一下,結(jié)果返回的是一個(gè)json對象。

如果我加上callback參數(shù)

http://to.ly/api.php?json=1&longurl=http%3A%2F%2Fwww.skiyo.cn&callback=somefunc

大家可以看到返回的是

?
1
somefunc({“shorturl”: “http:\/\/to.ly\/3XHP”, “ok”: true})

傳入的也正好是函數(shù)名。

這個(gè)想法很不錯(cuò),缺點(diǎn)就是對方服務(wù)器必須是可控的。

大方向是這個(gè)的,但是還有一些細(xì)節(jié)的小技巧,比如說如何在匿名函數(shù)中設(shè)置一個(gè)全局函數(shù),如何將這個(gè)全局函數(shù)變?yōu)槟涿瘮?shù)!

本來想直接把jQuery中的getJSON拿來直接用的,可是看了才知道,jQuery的ajax方法都混合到一起了,想剝落下來也不是一件容易的事。

慶幸的是我還懂一點(diǎn)JavaScript,經(jīng)過我的加工與修改,下面的例子已經(jīng)可以正常使用。詳細(xì)的可以查看注釋。

以下是代碼片段:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
(function() {
 var cross = {
 //設(shè)置一個(gè)隨機(jī)的callback函數(shù)..防止跟其他的全局函數(shù)重名
 callback : 'cross' + parseInt(Math.random()*1000),
 init : function() {
 this.getJSON('http://to.ly/api.php?json=1&longurl='+encodeURIComponent('http://www.skiyo.cn/'), function(data){
 alert(data.shorturl);
 });
 },
 getJSON : function(url, callback) {
 var c = this.callback;
 url = url + "&callback=" + c;
 // Handle JSONP-style loading
 //將函數(shù)名設(shè)置為window的一個(gè)方法,這樣此方法就是全局的了.
 window[ c ] = window[ c ] || function( data ) {
 //調(diào)用匿名函數(shù)
 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();
})();

總結(jié)

到此這篇關(guān)于jQuery中g(shù)etJSON跨域原理的文章就介紹到這了,更多相關(guān)jQuery getJSON跨域原理內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blogread.cn/it/article/1710

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲成人黄色片 | 蜜桃网在线 | 曰本三级日本三级日本三级 | 4p一女两男做爰在线观看 | 中文字幕综合 | 欧美一级黄视频 | 国产高清自拍一区 | 成人不卡 | 午夜国产成人 | 国产精品久久久久久婷婷天堂 | 亚洲欧洲av在线 | free japan xxxxhdsex69| 91网址在线播放 | 中文字幕1区2区 | 草莓福利视频在线观看 | 欧美性成人 | www.9191.com| 韩国精品久久久 | 综合国产一区 | 久草在线手机视频 | 国产精品亚洲精品日韩已方 | 草莓视频久久 | 久久久精品视频免费 | 国产在线中文 | 欧美激情性色生活片在线观看 | h视频免费看 | 久草干| 伊人二本二区 | 激情亚洲一区二区三区 | 精品欧美一区二区精品久久久 | 久久精品影视 | 久章草在线视频 | 在线成人免费av | 久久精品一区二区三区四区五区 | 久久久成人999亚洲区美女 | 久久99国产精品久久 | 欧美综合日韩 | 多人乱大交xxxxx变态 | 成人久久久精品乱码一区二区三区 | 日本视频在线免费观看 | 欧美国产日韩在线观看成人 |