国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

jquery解決客戶(hù)端跨域訪(fǎng)問(wèn)問(wèn)題

2024-05-06 16:13:46
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了jquery解決客戶(hù)端跨域訪(fǎng)問(wèn)問(wèn)題,jQuery.ajax()支持get方式的跨域,這其實(shí)是采用jsonp的方式來(lái)完成的,需要的朋友可以參考下
 

客戶(hù)端“跨域訪(fǎng)問(wèn)”一直是一個(gè)頭疼的問(wèn)題,好在有jQuery幫忙,從jQuery-1.2以后跨域問(wèn)題便迎刃而解。由于自己在項(xiàng)目中遇到跨域問(wèn)題,借此機(jī)會(huì)對(duì)跨域問(wèn)題來(lái)刨根問(wèn)底,查閱了相關(guān)資料和自己的實(shí)踐,算是解決了跨域問(wèn)題。便記錄下來(lái),以供查閱。

 jQuery.ajax()支持get方式的跨域,這其實(shí)是采用jsonp的方式來(lái)完成的。

 真實(shí)案例:

 

復(fù)制代碼代碼如下:
 
 $.ajax({ 
            async:false, 
            url: 'http://www.mysite.com/demo.do',  // 跨域URL
            type: 'GET', 
            dataType: 'jsonp', 
            jsonp: 'jsoncallback', //默認(rèn)callback
            data: mydata, 
            timeout: 5000, 
            beforeSend: function(){  //jsonp 方式此方法不被觸發(fā)。原因可能是dataType如果指定為jsonp的話(huà),就已經(jīng)不是ajax事件了
            },
            success: function (json) { //客戶(hù)端jquery預(yù)先定義好的callback函數(shù),成功獲取跨域服務(wù)器上的json數(shù)據(jù)后,會(huì)動(dòng)態(tài)執(zhí)行這個(gè)callback函數(shù) 
                if(json.actionErrors.length!=0){ 
                    alert(json.actionErrors); 
                } 
                genDynamicContent(qsData,type,json); 
            }, 
            complete: function(XMLHttpRequest, textStatus){ 
                $.unblockUI({ fadeOut: 10 }); 
            }, 
            error: function(xhr){ 
                //jsonp 方式此方法不被觸發(fā)
                //請(qǐng)求出錯(cuò)處理 
                alert("請(qǐng)求出錯(cuò)(請(qǐng)檢查相關(guān)度網(wǎng)絡(luò)狀況.)"); 
            } 
        });

 

        注意:

 

復(fù)制代碼代碼如下:

 $.getJSON(" http://www.mysite.com/demo.do?name1="+value1+"&callback=?", 
            function(json){ 
                if(json.屬性名==值){ 
                    // 執(zhí)行代碼 
                } 
        }); 

 

    這種方式其實(shí)是上例$.ajax({..}) api的一種高級(jí)封裝,有些$.ajax api底層的參數(shù)就被封裝而不可見(jiàn)了。

    在服務(wù)端通過(guò)callback= request.getParameter("callback") 得到j(luò)Query端隨后要回調(diào)的jsonp32440980
    然后返回類(lèi)似:"jsonp32440980("+要返回的json數(shù)組+")"; 
    jquery就會(huì)通過(guò)回調(diào)方法動(dòng)態(tài)加載調(diào)用這個(gè):jsonp32440980(json數(shù)組);
    這樣就達(dá)到了跨域數(shù)據(jù)交換的目的. 
    jsonp的最基本的原理是:動(dòng)態(tài)添加一個(gè)是一致的(qq空間就是大量采用這種方式來(lái)實(shí)現(xiàn)跨域數(shù)據(jù)交換的) 。JSONP是一種腳本注入(Script Injection)行為,所以也有一定的安全隱患。

    注意:jquey是不支持post方式跨域的。
    這是因?yàn)殡m然采用post +動(dòng)態(tài)生成iframe是可以達(dá)到post跨域的目的(有位js牛人就是這樣把jquery1.2.5 打patch的),但這樣做是一個(gè)比較極端的方式,不建議采用。也可以說(shuō)get方式的跨域是合法的,post方式從安全角度上被認(rèn)為是不合法的,萬(wàn)不得已還是不要post,client端跨域訪(fǎng)問(wèn)的需求看來(lái)也引起w3c的注意了,看資料說(shuō)html5 WebSocket標(biāo)準(zhǔn)支持跨域的數(shù)據(jù)交換,應(yīng)該也是一個(gè)將來(lái)可選的跨域數(shù)據(jù)交換的解決方案。


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 洪雅县| 西丰县| 乐平市| 乌鲁木齐市| 峨边| 阳谷县| 独山县| 宝鸡市| 恭城| 昌邑市| 濮阳市| 四子王旗| 武宁县| 当雄县| 庆安县| 赞皇县| 琼海市| 丹凤县| 郸城县| 和田市| 喀什市| 平定县| 望都县| 山东| 怀来县| 普安县| 饶平县| 三门峡市| 勃利县| 二手房| 遵义县| 荔浦县| 亳州市| 军事| 兴安县| 大方县| 德阳市| 和政县| 沭阳县| 民权县| 衡阳市|