標籤:
Jquery Ajax可以通過jsonp的方式跨域提交表單,至於什麼是跨域提交簡單說就是你的用戶端和服務端不在同一個網域名稱下或連接埠號碼不同也可以叫做跨域。
前台代碼:
$.ajax({ type : ‘get‘, async: false, url : ‘${pageContext.request.contextPath}/clue/uploadForm‘, dataType : ‘jsonp‘, data: { mydata : JSON.stringify(obj,fm), formId : formId }, jsonp: ‘callbackparam‘, jsonpCallback:‘success_jsonpCallback‘, success : function(json){ //alert(json.message); result = json.message; }, error : function(json,XMLResponse){ //alert(XMLResponse.responseText+XMLHttpRequest.status); result = "返回資訊:" + json.message + "錯誤碼:" + XMLHttpRequest.status; } });
後台代碼:
/** * 提交form表單資料 * @param request * @param session * @return * @throws IOException */ @RequestMapping(value ="uploadForm") public void uploadForm(HttpServletRequest request, HttpServletResponse response,HttpSession session) throws IOException{ Map<String,Object> dataMap = new HashMap<String,Object>();
dataMap.put("message","success"); String callbackparam = request.getParameter("callbackparam"); response.setCharacterEncoding("utf-8"); JSONObject json = JSONObject.fromObject(dataMap); System.out.println(callbackparam+"("+ json.toString() + ")"); response.getWriter().print(callbackparam+"("+ json.toString() + ")"); }
注意:
1.通過jsonp方式跨域傳回值不能為資料,其實為一段js代碼,所以如果是springmvc,不能使用@ResponseBody註解。
2.傳回值中要按照jsonp的格式,即callbackparam值加上“()”,括弧中為json字串
3.前台代碼中,jsonp屬性中callbackparam為回呼函數名稱變數名,jsonpCallback屬性為回呼函數名稱的值。
jquery Ajax 通過jsonp的方式跨域提交表單