1 $.ajax({ 2 type:"get", 3 async:false, 4 scriptCharset:"utf-8", 5 url:"<%=request.getContextPath() %>/loginAction.do?method=userLogin", 6 dataType : "jsonp",//数据类型为jsonp 7 jsonp: "jsonpCallback",//服务端用于接收callback调用的function名的参数 8 data:{"logo":"logo","account":account,"pwd":pwd,"validate":validate}, 9 jsonpCallback:"jsonpHandler",//后台处理后前台处理方法 ,该属性为必填项, 如果有该方法,后台处理后的数据将由 jsonpHandler(){}执行,不再执行ajax的success 和error方法 10 success: function(data){ 11 if(data.message=="success"){ 12 window.location.assign("<%=request.getContextPath() %>/index.do"); 13 }else{ 14 alert(data.message); 15 } 16 }, 17 error: function(XMLHttpRequest, textStatus, errorThrown) { 18 alert(XMLHttpRequest.status); 19 alert(XMLHttpRequest.readyState); 20 alert(textStatus); 21 } 22 });
1 <%-- 2 function jsonpHandler(data){ 3 if(data.message=="success"){ 4 window.location.assign("<%=request.getContextPath() %>/index.do"); 5 }else{ 6 alert(data); 7 } 8 } 9 --%>
后台处理
1 JSONObject jsonObject = new JSONObject(); 2 jsonObject.put("message", message); 3 String jsonpCallback = request.getParameter("jsonpCallback");//客户端请求参数 4 if (!message.equals("")) { 5 response.setCharacterEncoding("utf-8"); 6 response.getWriter().write(jsonpCallback+"("+jsonObject.toString()+")"); //返回给jsonp数据格式:jsonpCallback+"("+json数据+")" 7 response.getWriter().close(); 8 return null; 9 }
请求:
http://localhost:8080/aa/loginAction.do?method=userLogin&jsonpCallback=jsonpHandler&logo=logo&account=admin&pwd=admin&validate=7839
返回数据
jsonpHandler({"message":"success"})
-
jsonp
类型: String
在一个jsonp请求中重写回调函数的名字。这个值用来替代在"callback=?"这种GET或POST请求中URL参数里的"callback"部分,比如{jsonp:'onJsonPLoad'}会导致将"onJsonPLoad=?"传给服务器。在jQuery 1.5,,设置
jsonp
选项为false
,阻止了jQuery从加入"?callback"字符串的URL或试图使用"=?"转换。在这种情况下,你也应该明确设置jsonpCallback
设置。例如,{ jsonp: false, jsonpCallback: "callbackName" }
-
jsonpCallback
类型: String, Function
为jsonp请求指定一个回调函数名。这个值将用来取代jQuery自动生成的随机函数名。这主要用来让jQuery生成一个独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存GET请求的时候,指定这个回调函数名。从jQuery 1.5开始,你也可以使用一个函数作为该参数设置,在这种情况下,该函数的返回值就是
jsonpCallback
的结果。