extjs4.1 跨域非同步請求實現
此文由來
最近在搞乙個站點的訊息推送功能,原先乙個站點下面基於comet(ajax長連線)已經完成了功能。上線使用後發現之前的機制和原先**在乙個站點,對**的效能和後期分布式擴充套件會帶來不小的影響。最終拍拍屁股就打算把訊息機制單獨剝離出來,單獨成站點,當然資料庫還是原先的業務帳套。這個剝離第一想到的肯定是跨域ajax請求了,還好extjs4.1,對跨域已經支援。基本原理無非就是jsonp,通過新增腳步引用塊來實現。技術準備妥當,開始動手。園子裡面相關的文件也很多,大部分都是基於ext.data.store來現實的。比如:別人的東東
對於一些只是簡單的請求,其實大可不必這麼繞,下文將針對單純的非同步請求進行說明。這裡先引出今天的豬腳:ext.data.jsonp類。他分裝了大部分跨域的功能,拿來用就可以。原始碼就不黏貼了,ext自己找去:jsonp.js
前台實現
先黏貼處**:
1//跨域請求,msgurl為其他站點位址
2ext.data.jsonp.request(,
6 callbackkey: "jsonpcallback",
7 success: function
(result) else
14},
15 failure: function
(result)
18 });
紅色標出部分是跨域請求的要點,類名:ext.data.jsonp不用多說,就是類名~!!
「jsonpcallback」該名稱將作為jsonp請求的方法名傳遞到伺服器端,獲取該請求的url:
可以發現該名稱的意義了吧,當然在後台實現過程也會用到該值,當然取值隨意,前後臺統一就好。
後台實現(asp.net mvc4)
按照慣例,先黏**:
1///2
///客戶端註冊
3///
4///
5public
void initializecomet(string loginid, string
jsonpcallback)614
catch
(exception ex)
1518
19this.response.write(jsonpcallback + "
(" + newtonsoft.json.jsonconvert.serializeobject(commonajax) + ")"
);20 }
發現引數了吧,傳過來的值還得按照呼叫js的形式返還回去,格式比如 jsonpcallback("我要返還值給客戶端")
客戶端接到請求的串後,其實ext.data.jsonp為我們進行的中轉,直接把我們返會的東西帶進了方法:success: function(result)裡面。具體看原始碼。
那麼大致的實現就完成了!~
還是按照慣例,不放全部原始碼了,都是籤了保密協議的人,公司原始碼不可亂上傳。
CORS 跨域請求實現
什麼是cors?cors是乙個w3c標準,全稱是 跨域資源共享 cross origin resource sharing 它允許瀏覽器向跨源伺服器,發出xmlhttprequest請求,從而克服了ajax只能同源使用的限制。什麼是跨域?下面是乙個dva springboot 實現的跨域請求處理,直...
jQuery實現跨域請求例項
首先準備兩個專案做測試 jsonp1,jsonp2 def ajax request callbacks request.get.get callbacks get到的值為發起跨域請求的 傳過來的 print func name callbacks import json print 可以 走到 這...
ajax跨域請求例項
客戶端js 服務端 1 string callbackfunname context.request callbackparam 2 context.response.write callbackfunname ps 客戶端的jsonp引數是用來通過url傳參,傳遞jsonpcallback引數的引...