zoukankan      html  css  js  c++  java
  • 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的结果。

  • 相关阅读:
    页面静态化3 --- 伪静态技术
    9.14[XJOI] NOIP训练33
    9.13[XJOI] NOIP训练32
    Hello world!
    BZOJ-1853: [Scoi2010]幸运数字 (容斥原理)
    luogu1983[NOIP2013pjT4] 车站分级(拓扑排序)
    luogu1113 杂物 (拓扑排序)
    POJ-1094 Sorting It All Out && luogu1347 排序 (拓扑排序)
    BZOJ-1965: [Ahoi2005]SHUFFLE 洗牌 (快速幂+乘转加)
    BZOJ-2705: [SDOI2012]Longge的问题 (欧拉函数)
  • 原文地址:https://www.cnblogs.com/a757956132/p/5144529.html
Copyright © 2011-2022 走看看