javascript如何获取返回类型为JSON格式的数据?

e241138 2012-07-21 07:33:06
用的是Ajax异步方式,调用新浪的的api,返回的数据是这样的:
{"urls":[
{"result":true,"url_short":"http://t.cn/zWXySp","url_long":"http://www.cnblogs.com/e21684","type":0},
{"result":true,"url_short":"http://t.cn/zWX5FF","url_long":"http://www.cnblogs.com/e21156","type":0}
]}

不想用第三方库,请问有什么简单的方法吗?可以兼容主流浏览器的。谢谢啦
...全文
1241 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
暗夜螃蟹 2012-07-23
  • 打赏
  • 举报
回复

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>异步调用JSON</title>
</head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
<!--
var xmlhttp;
// 创建XMLHTTPRequest对象
function createXMLHTTPRequest()
{
if(window.ActiveXObject)//②如果当前浏览器为IE
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHTTPRequest)//③如果是其他浏览器
{
xmlhttp = new XMLHTTPRequest();
}
}

function getInfo()
{
createXMLHTTPRequest();
xmlhttp.open("get", "http://audicms.ogilvy.com.cn/webapp/front/dealerapi!getdealerlist.action", true);
xmlhttp.onreadystatechange = returnInfo;
xmlhttp.send(null);
}

function returnInfo()
{
if(xmlhttp.readyState == 4)
{
var info = xmlhttp.responseText;
eval("var json= " + info);
var message="";
var dealerlocation="";
var salesphone="";
for(var i=0;i<json.dealers.length;i++){
message+="经销商名称:<font style='color:red;'>" + json.dealers[i].name + "</font> <br/>";
salesphone+="经销商电话:<font style='color:red;'>" + json.dealers[i].salesphone + "</font> <br/>";
dealerlocation+="经销商经纬度:<font style='color:red;'>" + json.dealers[i].location + "</font> <br/>";
}


document.getElementById("showInfo").innerHTML = message;
document.getElementById("salesphone").innerHTML = salesphone
document.getElementById("location").innerHTML=dealerlocation;
}
}

-->
</script>
<body>

<br/><br/>
<h2 style="color: red;">异步调用JSON</h2>
<br/><input type="button" value="获取JSON数据" onclick="getInfo()" />
<table>
<tr>
<td><div id="showInfo"></div></td>
<td><span id="salesphone"><span></td>
<td><span id="location"><span></td>
</tr>
</table>
</body>
</html>

  • 打赏
  • 举报
回复
楼主还是用jquery 吧,能够兼容的
KK3K2005 2012-07-23
  • 打赏
  • 举报
回复
console.log(xmlHttp.responseText) 谷歌下 打印出来看

coooliang 2012-07-23
  • 打赏
  • 举报
回复
你现在这个返回的数据不就是JSON了。

用eval 可以将他转成对象
86y 2012-07-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 4 楼 的回复:

楼主 我建议你这种没办法做的。。跨域了!我以前也有准备做MP3音乐播放器。。ajax获取。。可以取得。但是还是行不通

额,那该怎么办?这是API接口返回的数据,我要用什么方法获得呢?
[/Quote]
NO way。除非那个网站你有权限!
hch126163 2012-07-23
  • 打赏
  • 举报
回复
跨域了
e241138 2012-07-23
  • 打赏
  • 举报
回复
准备结贴了,跨域的问题,另想办法了。


谢谢大家的帮助。
e241138 2012-07-23
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

自己做代理,要不就只能新浪的API接收你发送的回调参数名称,你就可以使用jsonp操作了,就是用script标签加载跨域的页面获取返回的json数据
[/Quote]

嗯,我去试试。
e241138 2012-07-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

console.log(xmlHttp.responseText) 谷歌下 打印出来看
[/Quote]

这是谷歌DeveloperTools的提示:
XMLHttpRequest cannot load [API地址] . Origin [调用页的地址] is not allowed by Access-Control-Allow-Origin.


意思就是跨域了吧。

balenofun117 2012-07-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

额,自己写了种方法
var json=xmlHttp.responseText;
var data=eval("("+json+")");
alert(data["urls"][0]["url_short"]);


为什么只能在IE下用,谷歌就不行呢?
[/Quote]
这样子应该就可以了吧,试试data["urls"][0].url_short吧
都不知道楼上说的是啥,楼主的问题都没看清楚就回答。。。
Go 旅城通票 2012-07-23
  • 打赏
  • 举报
回复
自己做代理,要不就只能新浪的API接收你发送的回调参数名称,你就可以使用jsonp操作了,就是用script标签加载跨域的页面获取返回的json数据
HolyNova 2012-07-23
  • 打赏
  • 举报
回复
evar("response = " + xmlHttp.responseText)
e241138 2012-07-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

楼主 我建议你这种没办法做的。。跨域了!我以前也有准备做MP3音乐播放器。。ajax获取。。可以取得。但是还是行不通
[/Quote]
额,那该怎么办?这是API接口返回的数据,我要用什么方法获得呢?
86y 2012-07-22
  • 打赏
  • 举报
回复
你这个IE也会弹出提示框的!
86y 2012-07-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 4 楼 的回复:

楼主 我建议你这种没办法做的。。跨域了!我以前也有准备做MP3音乐播放器。。ajax获取。。可以取得。但是还是行不通



不是的,我在IE下已经取到了的。
现在的问题是,在谷歌浏览器下无效了,不知道什么原因。
[/Quote]
这个我知道。
e241138 2012-07-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

楼主 我建议你这种没办法做的。。跨域了!我以前也有准备做MP3音乐播放器。。ajax获取。。可以取得。但是还是行不通
[/Quote]


不是的,我在IE下已经取到了的。
现在的问题是,在谷歌浏览器下无效了,不知道什么原因。

86y 2012-07-21
  • 打赏
  • 举报
回复
楼主 我建议你这种没办法做的。。跨域了!我以前也有准备做MP3音乐播放器。。ajax获取。。可以取得。但是还是行不通
e241138 2012-07-21
  • 打赏
  • 举报
回复
额,自己写了种方法
var json=xmlHttp.responseText;
var data=eval("("+json+")");
alert(data["urls"][0]["url_short"]);


为什么只能在IE下用,谷歌就不行呢?
zzt369880281 2012-07-21
  • 打赏
  • 举报
回复
我觉得用jquery就没那么多事了
e241138 2012-07-21
  • 打赏
  • 举报
回复
我用的是xmlHttp.responseText,但具体的不知道该怎么获取数据,比如获取第一个url_short的值



大神在哪里?

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧