jquery + jsonp +ajax 跨域访问

Anything 2014-09-03

js跨域访问有时候确实不好搞定,所以在特定的情形下就能跨域访问,这里我用的是简单的get提交,post很难搞,不借助其他手段根本实现不了,这里只讲get提交,然后获取返回数据,下面一组代码,我验证过的,直接运行即可,一个页面,一个后台java,java用的springmvc实现

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=charset=utf-8">
   <script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<title>控制台</title>

</head>
<script type="text/javascript">

	$(function(){
		$.ajax({
				data:{status:22,schedulerId:33},
				url:"http://127.0.0.1:8080/consoleAction/a.do",
				type : "get",
				cache : false,
				dataType : 'jsonp',
				jsonp: "jsonpCallback",//服务端用于接收callback调用的function名的参数 
				success:function(data){
					alert(data.result);
				},
				error:function(msg){
					alert("error!!");
				}
			});
	});
	
	function callback(data){
		alert(data);
	}
</script>
<body>
	
</body>
</html>

 java代码

import java.io.IOException;
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.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.alibaba.fastjson.JSON;
/**
 * 
 * @author songxiuliang
 *
 */
@Controller
@RequestMapping("consoleAction")
public class ConsoleAction {
	
	
	@RequestMapping(value="a.do" ,method=RequestMethod.GET)
	public void a(HttpServletRequest request, HttpServletResponse response) throws IOException {
		try {  
	        Map<String,String> map = new HashMap<String,String>();   
	        map.put("result", "contentdddrrr");  
	        String jsonpCallback = request.getParameter("jsonpCallback");//客户端请求参数  
	        response.getWriter().print(jsonpCallback+"("+JSON.toJSONString(map)+")");//返回jsonp格式数据 (这个格式必须这样写,否则跨域访问返回ajax会进入error函数,这个跟不跨越有点区别,其他都一样) 
	     } catch (IOException e) {  
	       e.printStackTrace();  
	     }

	}
}

相关推荐