jsonp跨域问题

 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的结果。

原文地址:https://www.cnblogs.com/a757956132/p/5144529.html