如何解决跨域问题(JSONP篇)


如何解决跨域问题(一)

1.什么是跨域?

跨域,即域名,端口号,协议等不一样,访问就会产生跨域问题

2. JSON解决跨域

eg1: 在localhost:8081 下访问 localhost:8082/index/demo

script 标签解决跨域问题

  • script image iframe 等标签都可以进行跨域

<head>
    <meta charset="UTF-8">
    <title>测试跨域问题</title>
</head>
<body>
<div id="loginForm">
    <button onclick="demoFunc()">发送请求</button>
</div>

// 客户端   端口号:8081
<script src="js/jquery-1.12.3.min.js"></script>
<script type="text/javascript">
	/*这是回传所触发方法*/
    /*回传参数格式:ShowMessage( {"info":"requestSuccess"} )*/
    function ShowMessage(data) {
       console.log(data.info)
    }
	/*目的在于向head中添加script,达到请求目的*/
    function demoFunc() {
        var ele=document.createElement("script");
        ele.type='text/javascript';
        ele.src="http://localhost:8082/index/demo?callback=ShowMessage";
        $('head').append(ele)
    }
	/*或者使用*/
    function demoFunc(){
        $('head').append("<script src='http://localhost:8082/index/demo?callback=ShowMessage'>					<\/script>")  /*注意闭合标签 有‘\’ 目的在于转义 */
    }
</script>
   

 
 //服务器端  端口号:8082
    
 @Controller
 @RequestMapping("/index")
public class IndexController {

    @RequestMapping("/demo")
    @ResponseBody
    public String demo(@RequestParam("callback") String callback){
        String jsonData="{\"info\":\"RequestSuccess\"}";
        String resInfo=callback+"("+jsonData+")";
        return resInfo;
    }
    //回传的参数格式:回传方法名(  回传参数*要求是json格式*  )
}

客户端使用ajax请求

 function demoFunc() {
      $.ajax({
          url:'http://localhost:8082/index/demo',
          type:'get',
          dataType:'jsonp',  //指定服务器返回的数据类型
          jsonp:'callback',  //这里表示请求的参数 默认为callback 即?callback=ShowMessage
          jsonpCallback:'ShowMessage',   //表示回传的方法
          success:function (data) {
              console.log("success")
          }
      })
}

注意:jsonp不支持post方法 所以在表单等一些情况下,是无法使用jsonp的,即下文会说CORS 的解决方法;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM