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

首頁 > 語言 > JavaScript > 正文

ajax前臺(tái)后臺(tái)跨域請(qǐng)求處理方式

2024-05-06 15:21:59
字體:
供稿:網(wǎng)友

最近一直在搞公眾號(hào)前臺(tái)開發(fā),遇到了ajax跨域請(qǐng)求的問題,像地區(qū)的省-市-縣三級(jí)聯(lián)動(dòng)、汽車品牌-車系-車款的三級(jí)聯(lián)動(dòng)查詢等都需要調(diào)用外部接口(其他工程項(xiàng)目的接口)完成。下面就分享一下個(gè)人解決跨域請(qǐng)求的方案,當(dāng)然是在后臺(tái)程序猿大哥的幫助下,我才弄明白了其中的淵源,趕緊記錄下來慢慢積累,也希望對(duì)大家能有所幫助,還請(qǐng)積極提出意見或建議。

跨域請(qǐng)求需要借助后臺(tái)代碼接收callback回調(diào)函數(shù),對(duì)json數(shù)據(jù)進(jìn)行進(jìn)一步處理;前臺(tái)再用ajax請(qǐng)求向服務(wù)器發(fā)送callback參數(shù),并指定數(shù)據(jù)格式為jsonp。

一、后臺(tái)對(duì)跨域請(qǐng)求進(jìn)行處理

1.CarBrandController.java(汽車品牌接口java文件),這里列出的方法主要用來根據(jù)不同的level值查詢對(duì)應(yīng)的品牌、車系、車款,在這里對(duì)跨域請(qǐng)求做一個(gè)接收回調(diào)函數(shù)的處理,如果返回的callback為null,則不是跨域請(qǐng)求,不需要做特殊處理,直接打印json接口數(shù)據(jù)即可;如果返回的callback不為null,則表示跨域請(qǐng)求,這時(shí)要對(duì)json數(shù)據(jù)做一個(gè)特殊處理,即在json數(shù)據(jù)的外層加一對(duì)小括號(hào)包起來,具體請(qǐng)看HttpAdapter.java文件中的printlnJSONObject方法。

public void json(HttpServletRequest request,HttpServletResponse response){   Map<String,Object>map=new HashMap<String, Object>();   String id = request.getParameter("id");      //接收ajax請(qǐng)求帶過來的id   String level = request.getParameter("level");   //接收ajax請(qǐng)求帶過來的level   String callback=request.getParameter("callback"); //接收ajax請(qǐng)求帶過來的callback參數(shù)   if ("1".equals(level)) {             //如果level是'1',則查詢第一級(jí)目錄內(nèi)容     map.put("results", this.carBrandService.findByAttr(null, "first_letter asc")); //調(diào)用查詢方法,結(jié)果放入map   } else if ("2".equals(level)) {          //如果level是'2',則查詢第二級(jí)目錄內(nèi)容     map.put("results", this.carSerieService.findByAttr("parent_id="+id, "first_letter asc"));//調(diào)用查詢方法,結(jié)果放入map   } else if ("3".equals(level)) {          //如果level是'3',則查詢第三極目錄內(nèi)容     map.put("results", this.carModelYearService.findByAttr("parent_id="+id, "jian_pin desc"));//調(diào)用查詢方法,結(jié)果放入map   }   map.put("level",level);   if (null==callback) {               //如果接收的callback值為null,則是不跨域的請(qǐng)求,輸出json對(duì)象     HttpAdapter.printlnObject(response, map);   }else{                      //如果接收的callback值不為null,則是跨域請(qǐng)求,輸出跨域的json對(duì)象   HttpAdapter.printlnJSONPObject(response, map, callback);   } } 

2.HttpAdapter.java(輸出對(duì)象的java文件),printlnObject方法打印正常json字符串;printlnJSONObject方法對(duì)json字符串進(jìn)行了特殊處理。

/**  * 打印對(duì)象  * @param response  * @param object */ public static void printlnObject(HttpServletResponse response,Object object){   PrintWriter writer=getWriter(response);   writer.println(JSON.toJSONString(object)); } /**  * 打印跨域?qū)ο? * @param response  * @param object */ public static void printlnJSONPObject(HttpServletResponse response,Object object,String callback){   PrintWriter writer=getWriter(response);   writer.println(callback+"("+JSON.toJSONString(object)+")"); }             
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 呼玛县| 永川市| 贡山| 桐柏县| 湛江市| 株洲市| 达孜县| 德化县| 和田市| 甘德县| 汉沽区| 晋城| 大竹县| 崇左市| 吉首市| 金堂县| 乐平市| 二手房| 年辖:市辖区| 永济市| 常宁市| 万盛区| 昭通市| 临西县| 福建省| 犍为县| 团风县| 江门市| 灌云县| 青川县| 信宜市| 长泰县| 冀州市| 梧州市| 黄骅市| 弋阳县| 边坝县| 昭苏县| 平山县| 乡宁县| 察隅县|