jquery + jsonp +ajax 跨域访问
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(); } } }