JQuery的Ajax跨域請求的解決方案
今天在項目中需要做遠程數據加載并渲染頁(yè)面,直到開(kāi)發(fā)階段才意識到ajax跨域請求的問(wèn)題,隱約記得Jquery有提過(guò)一個(gè)ajax跨域請求的解決方式,于是即刻翻出Jquery的API出來(lái)研究,發(fā)現JQuery對于A(yíng)jax的跨域請求有兩類(lèi)解決方案,不過(guò)都是只支持get方式。分別是JQuery的jquery.ajax jsonp格式和jquery.getScript方式。
什么是jsonp格式呢?API原文:如果獲取的數據文件存放在遠程服務(wù)器上(域名不同,也就是跨域獲取數據),則需要使用jsonp類(lèi)型。使用這種類(lèi)型的話(huà),會(huì )創(chuàng )建一個(gè)查詢(xún)字符串參數 callback=? ,這個(gè)參數會(huì )加在請求的URL后面。服務(wù)器端應當在JSON數據前加上回調函數名,以便完成一個(gè)有效的JSONP請求。意思就是遠程服務(wù)端需要對返回的數據做下處理,根據客戶(hù)端提交的callback的參數,返回一個(gè)callback(json)的數據,而客戶(hù)端將會(huì )用script的方式處理返回數據,來(lái)對json數據做處理。JQuery.getJSON也同樣支持jsonp的數據方式調用。
客戶(hù)端JQuery.ajax的調用代碼示例:
04 | url : "http://www.xxx.com/ajax.do", |
06 | jsonp: "callbackparam", |
07 | jsonpCallback:"success_jsonpCallback", |
08 | success : function(json){ |
服務(wù)端返回數據的示例代碼:
1 | public void ProcessRequest (HttpContext context) { |
2 | context.Response.ContentType = "text/plain"; |
3 | String callbackFunName = context.Request["callbackparam"]; |
4 | context.Response.Write(callbackFunName + "([ { name:\"John\"}])"); |