今天朋友问了我一个问题:在本地直接用浏览器打开写有$.ajax调用远程的一个请求,可以返回服务器响应的数据,但是用在项目里的时候,我们则直接用http://localshot范围则出现无响应!所以我猜是跨域问题,马上就去google搜索了一下jquery跨域的解决,是用$.getJSON这个方法,但是我测试了许久,还是不行,继续找,还是没能找到。于是沉下心来,自己想:现在就是我可以通过那个远程的方法在浏览器中打开,可以显示服务器返回来的数据,那么这个请求时成功响应的!如果在前端,我们是否能获得该数据呢,起初,我想到了iframe,但是iframe也不能跨域控制呀!所以只能想到服务器的控制了,所以下面贴出了解决的代码,分享出去
1.写一个抓取远程页面的代码(我直接在jsp页面里写的了,方便)
取名为js.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
- <%@page import="java.net.URL"%>
- <%@page import="java.net.HttpURLConnection"%>
- <%@page import="java.io.BufferedReader"%>
- <%@page import="java.io.InputStreamReader"%>
- <%
- URL url = new URL("http://*.*.*.*/api.php?json=GetHouseDetail&houseid=1");
- HttpURLConnection hurl = (HttpURLConnection)url.openConnection();
- BufferedReader br = new BufferedReader(new InputStreamReader(hurl.getInputStream()));
- String json = "";
- String str = br.readLine();
- while(str!=null){
- json += str;
- str = br.readLine();
- }
- br.close();
- out.print("var str = "+json);
- %>
2.写一个处理前段处理页面
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>My JSP 'index.jsp' starting page</title>
- </head>
- <body>
- <script type="text/javascript" src="jquery-1.3.2.min.js"></script>
- <script type="text/javascript" src="js.jsp"></script>
- <script type="text/javascript">
- $(document).ready(function(){
- alert(str[0].buildingArea);
- });
- </script>
- </body>
- </html>
3.通过http打开前段处理页面,打印出数据,处理成功
总结:其实ajax也是给服务器发送一个请求然后服务器给客户端响应一个请求。
这种办法,也是给服务器发送一个请求,然后获得服务器端响应的数据。