java 处理跨域问题(ajax使用jsonp)

案例 :公司的一个A项目是PHP写的,B项目是JAVA写的,现在A项目的页面部分数据需要调用B项目的接口,A项目的页面使用的是ajax发送请求,这时出现了跨域问题,造成跨域的原因是,A项目端口号是80,B项目端口号是8080。

跨域就是:IP,协议,端口号,这三个有一个不相同就会出现跨域。

协议举个例子:

https://192.168.0.25:8080/javaZnyw

http://192.168.0.25:8080/javaZnyw  

这两个IP,端口号都一样,但协议不一样,一个https协议,一个http协议,这样就跨域。



IP举个例子:

A项目的IP是192.168.0.27     

B项目的IP是192.168.0.25

那么这两个项目的IP是一样的,都是”0“网段,

如果:

A项目IP是192.168.1.27

B项目的IP是192.168.0.27

那么这两上项目的IP是不一样的,就会出现跨域



端口号举例子:

http://192.168.0.27:80/phpZnyw    想调用    http://192.168.0.25:800/javaZnyw   IP和协议一样,但端口号不一样,这也跨域

我解决跨域的方式(亲测可以)

前端采用ajax发送请求,代码如下:

                $.ajax({
                            url: 'http://192.168.0.25:8080/znywLock/assets/queryAssetsList',
                            type: 'post',
                            async: false,
                            data: {'username':'xiaoming','password':'123456'},
                            jsonp: "callback",
                            dataType: 'jsonp',
                            success: function(data) {
                                success(data.data)
                            },
                            error: function(data) {
                                $.messager.alert('提示', '出现未知错误!', 'warning')
                            }
                        })

接下来,java端接收参数处理

@RequestMapping(value="/queryAssetsList",produces = "application/json; charset=utf-8")
	@ResponseBody
      public String queryAssetsList(String username,String password,String callback){ //这里的callback一定要和ajax里jsonp值一样
                JSONObject jsonObject=assetsService.queryAssetsList(username,password);
		String str=jsonObject.toString();
		return callback+"("+str+")"; //这里的callback一定要和ajax里jsonp值一样

	}



你可能感兴趣的:(JAVA)