前端跨域请求jsonp实现

2025-11-25 20:43:24

1、第一种躲瞧:创建一个springboot的项目。

1、 打开创建页面 选择File-new-project..

2、选择创建的项目为spring initializr 进入springboot项目创建步骤(也可以选择类型java,创建一个普通java项目)

3、输入码往项目名字,选择依赖web(根据项目需求选择,此次需要),选择存放目录-完成(Finish)

前端跨域请求jsonp实现

前端跨域请求jsonp实现

前端跨域请求jsonp实现

前端跨域请求jsonp实现

前端跨域请求jsonp实现

2、第二种:创建一个简单的javaweb项目。

1、直接打开:沟颂袭https://jingyan.baidu.com/article/ff411625048acf12e482373a.html

2、或者百度搜索:servlet类如何映射到url路径 百度经验

前端跨域请求jsonp实现

1、第一步:编写被调用项目的controller。

1、需要集成springmvc,springboot项目集成web就包含springmvc,普通的servlet需要:

PrintWriter w = response.getWriter();w.print(json);

2、端口默认8080

3、controller代码如下所示

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.util.Map;

@RestController

public class TestController {

@RequestMapping("/bean")

public String testJson(HttpServletRequest request,

HttpServletResponse response, Map paramMap) {

String callback = request.getParameter("callback");

String id = request.getParameter("id");

String name = request.getParameter("name");

String sex = request.getParameter("sex");

String json = "{'id':" + id + ",'name':'" + name + "','sex':'" + sex

+ "'}";

if (callback != null) {

json = callback + "(" + json + ")";

}

return json;

}

}

4、启动服务并测试:

http://localhost:8080/bean?id=2&name=张三&sex=男

前端跨域请求jsonp实现

前端跨域请求jsonp实现

2、第二步:调用项目的准备。

1、新建一个javaweb项目

2、在端口号设置为8020

3、编写跨域调用代码,主要是页面js的编写

1、第一种:原生的js实现跨域。

1、借助于原生javascript实现,具体代码如下所示:

window.onload = function () {

 var script = document.createElement('script');

 script.setAttribute("type","text/javascript");

 script.src = 'http://localhost:8080/bean?callback=ajaxCallback&id=2&name=张三&sex=男';

 document.body.appendChild(script);

}

 

function ajaxCallback(data) {

 alert('response data: ' + JSON.stringify(data));

};

前端跨域请求jsonp实现

前端跨域请求jsonp实现

2、第二种:借助于jquery的getJSON实现。

具体代码如下所示:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>跨域测试</title>

<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>

</head>

<body>

<script>

$.getJSON("http://localhost:8080/bean?callback=?", {id:2,name:'李四',sex:'男'},

    function(data) {

alert(data.id+data.name+data.sex);

});

</script>

</body>

</html>

前端跨域请求jsonp实现

前端跨域请求jsonp实现

3、第三种:借助于jquery的ajax实现。

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>跨域测试</title>

<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>

</head>

<body>

<script>

$.ajax({

        //设置请求类型

        type:"get",

        //请求超时时间

        timeout:5000,

        //设置请求地址

        url: 'http://localhost:8080/bean',

        //设置需要发送的数据

        data: {id:2,name:'李四',sex:'男'},

        //定义此请求为跨域请求

        dataType: 'jsonp',

        //定义回调函数

        jsonpCallback:"callbackUser",

        success: function (data) {

console.log("成功");

        },

        error: function (data) {

           console.log(data)

        }

    })

function callbackUser(data){

alert("id:"+data.id+" name:"+data.name+" sex:"+data.sex);

}

</script>

</body>

</html>

前端跨域请求jsonp实现

前端跨域请求jsonp实现

4、第四种:主要是对三种的优化。

1、主要是去除jsonpCallback属性,url中传callback=?定义默认调用ajax的回调函数。要与后台代码对应(String callback = request.getParameter("callback");)

2、调用项目页面如下所示:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>跨域测试</title>

<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>

</head>

<body>

<script>

$.ajax({

        //设置请求类型

        type:"get",

        //请求超时时间

        timeout:5000,

        //设置请求地址

        url: 'http://localhost:8080/bean?callback=?',

        //设置需要发送的数据

        data: {id:2,name:'李四',sex:'男'},

        //定义此请求为跨域请求

        dataType: 'jsonp',

        success: function (data) {

console.log("成功");

alert("id:"+data.id+" name:"+data.name+" sex:"+data.sex);

        },

        error: function (data) {

           console.log(data)

        }

    })

</script>

</body>

</html>

前端跨域请求jsonp实现

前端跨域请求jsonp实现

1、jsonp实现的方式就是借助于script标签的src属性获取数据,然后将数据作为参数传给函数,解析数据。这一点我们需要结合后台callback +  "(" + json + ")"

可以看出一二。

2、跨域问题的解决方案除了jsonp方式外还有一种CORS,与jsonp不同的是这是一种后台解决方案。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢