有关jsAjax和jqAjax的问题,先谢谢了!

lvyichang 2012-04-26 02:27:27
获取json数据是在以下的连接:
http://services.digg.com/stories/top?appkey=http%3A%2F%2Fmashup.com&type=javascript&callback=?
这没问题!

问题是用jsAjax访问是拒绝访问,
而用jqAjax就可以访问的,
1.这是什么道理?
2.怎样用jsAjax访问?

以下是代码:
jsAjax代码:提示拒绝访问
        <script type ="text/javascript">
onload = function() {
var xhr = new XMLHttpRequest();
var url = "http://services.digg.com/stories/top?appkey=http%3A%2F%2Fmashup.com&type=javascript&callback=?";
xhr.open("get", url, true);

xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
var jsonData = eval("(" + xhr.responseText + ")"); //得到JSON对象
alert(jsonData.stories.length); //得到json数据数量
//......
}
}
}
xhr.send();
}
</script>

jqAjax代码:访问没问题,得到数值是15
    <script type="text/javascript">
$().ready(function() {
var url = "http://services.digg.com/stories/top?appkey=http%3A%2F%2Fmashup.com&type=javascript&callback=?";
$.getJSON(url, function(data) {
alert(data.stories.length);
});
});
</script>
...全文
137 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yibey 2012-04-26
  • 打赏
  • 举报
回复
你这个是跨域访问了,跨域请求的时候HTTPREQUEST都会报警,也就是跨域请求数据的时候并不是普通意义上的AJAX。。

JSONP请求数据的原理是:在本地DOCUMENT 中生成一个标签script 这个标签如上面有的例子

<script src="http://services.digg.com/stories/top?appkey=http%3A%2F%2Fmashup.com&type=javascript&callback=callbackFun" type="text/javascript"></script>

这个地址会生成一个返回字符串,也就是你的程序加载了一段JS,这段JS是从远程服务器上下载下来的,并且远程服务器会自动加上你的callbackFun(这个是后台的事情了)。
所以整个过程就是动态生成SCRIPT标签,下载服务器JS,最后需要的地方执行该JS。这就是我理解的JSONP了。。
lvyichang 2012-04-26
  • 打赏
  • 举报
回复
thanks 5楼
潮起潮落 2012-04-26
  • 打赏
  • 举报
回复

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>融化这个BUG。</title>
<script type="text/javascript">
var list = null;
function callbackFun(o) {
list = o;
}
</script>
<script src="http://services.digg.com/stories/top?appkey=http%3A%2F%2Fmashup.com&type=javascript&callback=callbackFun" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">
document.write(list.count);
</script>
</body>
</html>

erytbc 2012-04-26
  • 打赏
  • 举报
回复
http://blog.csdn.net/sunqunsunqun/article/details/7428069
erytbc 2012-04-26
  • 打赏
  • 举报
回复
参考
http://blog.csdn.net/sunqunsunqun/article/details/7428069
lvyichang 2012-04-26
  • 打赏
  • 举报
回复
谢谢楼上!在线等!
潮起潮落 2012-04-26
  • 打赏
  • 举报
回复
事关JSONP。JQ内部帮你做了callback的相关处理
JS的话,不是直接请求的,要你定义一个函数名为
var obj;
callbackFun(o)
{
obj=o;
}
然后<script src="json地址"></script>
json地址中的callback改为callbackFun,然后请求过来的JS就会执行callbackFun({...json对象...});
稍等给你DEMO

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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