日期:2014-05-17  浏览次数:20726 次

贴一段Jquery代码。大家看看为什么data无法获得
$(function(){
 
    var jqxhr = $.getJSON('http://chaxun.1616.net/s.php?type=ip&output=json&callback=json&_='+Math.random(),
            function (data) {
                alert(data.ip);
            })
        .error(function () { alert("error"); })

}); 

这段代码是想在页面加载时获得IP地址的,结果返回error啦。所以请大家看看,如果谁发现问题所在。分全给你啦,页面代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title></title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript" src="<%=path %>/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="<%=path %>/js/getAddress.js"></script>
  </head>
  
  <body>
  
  </body>
</html>

------解决方案--------------------
http://chaxun.1616.net/s.php?type=ip&output=json&callback=json
这个URL返回的数据格式是这样的!
json({"Ip":"111.85.194.242","Isp":"贵州省贵阳市 联通","Browser":"","OS":"","QueryResult":1})

先不说这可不是什么json格式!
{"Ip":"111.85.194.242","Isp":"贵州省贵阳市 联通","Browser":"","OS":"","QueryResult":1}

这样才是JSON格式!你需要处理一下把json(跟后面的)处理掉、那么剩下的才是json字符串。这样data.Ip才能获取到ip的值。
你用getJSON方法去访问、那么返回值必须是JSON、如果返回的不是JSON格式、jquery内部解析的时候就会出错、所以你的方法出错了!
你取ip的时候也出错了、注意人家的ip变量名是这样的"Ip"而不是你写的ip
如果这个URL接口不是你们内部的接口、那么跨域很多浏览器是拒绝访问的!
IE8会弹出提示框、"该网页正在访问其控制范围之外的信息。这可能导致安全风险。是否继续?"要用户自己点击确定了才能去访问、取消了就不会访问这个URL了!用户体验极差。
两个方案:
(推荐)第一:使用java后台访问这个URL、获取到内容后、拼装成json格式返回、然后页面访问你自己的java后台。这样解决跨域问题。
第二:继续使用网页直接跨域访问、不在乎用户体验、但是不能用getJSON、而是直接使用get、这样对返回的字符串进行处理!