Json   发布时间:2022-04-22  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jsonp跨域访问服务大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
前段时间在做产品开发的时候,需要与公司网站那边进行交互,我们所开发的产品上线后是放在一个域名下,公司网站那块是在另一个域名下,这样在页面调用
网站那边的接口时就存在跨域的问题,当时为了不修改网站那边的接口,所以采用在服务端通过webservice方式进行调用网站接口,问题也很快解决了,当时我就在想
如果需要在js中直接访问的话,就涉及到到跨域的问题,那么怎么做才能解决这个问题呢,我上网找了一些资料,最后采用的是jsonp的方式来解决的。下面我来给大家分享
用jsonp方式解决跨域问题。分为以下步骤:
1、引入jquery.js,使用$.ajax()来定义jsonp,如下:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%
	String path = request.getContextPath();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<script type="text/javascript" src="${path}/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
	
	$(function(){
		$("#jsonp").click(function(){
			$.ajax({
				url:"/demo/jsonp.action",type:"GET",async:false,dataType:"jsonp",jsonp:"jsonpCallback",jsonpCallback:"showAge",success:function(data){
					//alert(data.name);
				}
				
				
			}
			);
			
		});
		
	});
	function showAge(data){
		alert(data.age);
	}
</script>
</head>
<body>
	<a id="jsonp" href="">使用jsonp</a>
</body>
</html>

2、服务器端处理:
package com.mall.web.action;


import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.modelattribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;


import com.alibaba.fastjson.JSONObject;


@Controller
@RequestMapping("/demo/")
public class DemoAction {
private HttpServletRequest request;
	
	private HttpServletResponse response;
	
	@modelattribute
	public void setRequestAndResponse(HttpServletRequest request,HttpServletResponse response){
		
		this.request = request;
		this.response = response;
	}
	
	@RequestMapping(value="jsonp",method=RequestMethod.GET)
	public void jsonp(){
		 try {  
		        response.setContentType("text/plain");  
		        response.setHeader("Pragma","No-cache");  
		        response.setHeader("Cache-Control","no-cache");  
		        response.setDateHeader("Expires",0);  
		        PrintWriter out = response.getWriter();       
		        JSONObject resultJSON = new JSONObject();
		        resultJSON.put("name","wen");
		        resultJSON.put("age","17");
		        String jsonpCallback = request.getParameter("jsonpCallback");//客户端请求参数  
		        System.out.println("-------------------->"+jsonpCallback);
		        System.out.println("-------------------->"+resultJSON.toJSONString());
		        out.println(jsonpCallback+"("+resultJSON.toJSONString()+")");//返回jsonp格式数据  
		        out.flush();  
		        out.close();  
		      } catch (IOException e) {  
		       e.printStackTrace();  
		      }  
		
	}
	
}


该访问的URL地址为:/demo/jsonp.action?jsonpCallback=“showAge”

在上述事例中,需要注意以下几点: 1、jsonp中只能使用get请求,ajax请求中dataType为jsonp 2、jsonp定义的URL地址中的参数名认为callback 3、jsonpCallback定义的时jsonp定义的参数对应的值,也是服务器需要回调的函数,若jsonpCallback为定义值,认回调success函数 4、服务器接受请求后,需要返回符合参数传递过来的回调函数如: out.println(jsonpCallback+"("+resultJSON.toJSONString()+")");//返回jsonp格式数据 以上就是jsonp的访问过程,这里需要大家好好理解。因为使用jsonp跨域访问,需要客户端和服务端定义一个规则,即回调函数的规则,所以 在开发的过程中需要客户端和服务端的开发人员共同定义一个规则。 其实我们还可以通过$.get()和$.getJson()方式来跨域访问,这里就不跟大家细说了,如果感兴趣的朋友,可以自己去了解下,今天就给大家分享到这, 我们下期再见,接下来会为大家分享android的一些知识。

大佬总结

以上是大佬教程为你收集整理的jsonp跨域访问服务全部内容,希望文章能够帮你解决jsonp跨域访问服务所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: