Javascript 显示JSONP数据

Javascript 显示JSONP数据,javascript,html,json,Javascript,Html,Json,我在显示从另一个域上的JSONP服务获取的数据时遇到问题。我一直在关注大量的教程和指南,但无法在网页上显示 我尝试使用javascript在HTML页面上显示返回的JSON对象 我可以看到JSON对象被返回,我可以使用Fiddler查看它,但我无法进入下一个阶段并在页面上实际生成它 我一直在遵循这个例子,更具体地说是推特的解释,并一直试图使它适应我自己的需要 据我所知,下面URL末尾的myCallback是一个我必须定义的函数 <script src="http://twitter.com

我在显示从另一个域上的JSONP服务获取的数据时遇到问题。我一直在关注大量的教程和指南,但无法在网页上显示

我尝试使用javascript在HTML页面上显示返回的JSON对象

我可以看到JSON对象被返回,我可以使用Fiddler查看它,但我无法进入下一个阶段并在页面上实际生成它

我一直在遵循这个例子,更具体地说是推特的解释,并一直试图使它适应我自己的需要

据我所知,下面URL末尾的myCallback是一个我必须定义的函数

<script src="http://twitter.com/status/user_timeline/padraicb.json?count=10&callback=myCallback"></script>

<script>
function myCallback(jsonData) {...}
<script>

函数myCallback(jsonData){…}
如果到目前为止我是对的,我如何访问
jsonData
并显示页面上的所有内容

有人能给我一个如何处理这个问题的通用例子,并解释一下他们在做什么吗


我知道这已经被问了100次了,但我只需要被指向正确的方向。谢谢大家。

代码的一个问题是,它没有生成一个-是的,但不是以异步方式!相反,代码使用请求的结果作为“普通”非动态脚本源目标,默认情况下,脚本元素同步加载脚本

在这种情况下,发布的HTML将导致ReferenceError(检查错误控制台),因为在评估JSONP脚本源时未定义
myCallback
。一个“修复”方法是首先将脚本放入
myCallback
,至少之后应该用数据调用它

要异步从HTML文档中获取JSONP wrt,可以动态加载JSONP脚本元素(例如在“onload”中),或者使用包装器(例如
jQuery.ajax
)自动包装/分派JSONP请求。
async
属性也可能是一个选项,但它不是普遍支持的

一旦获得数据,就必须以有意义的方式使用它。我不确定上下文中什么是“有意义的”。在任何情况下,以下内容都应显示一个警报,并返回数据:

<!-- ensure the function is defined first -->
<script>
// data is /not/ JSON, just a normal JavaScript value ..
function mycallback(data) {
    // .. and turn the data into a JSON string for display
    // (`debugger` and `console.log` will be more useful for exploring)
    alert(JSON.stringify(data))
}
</script><!-- make sure to use valid HTML -->
<script src="http://twitter.com/status/user_timeline/padraicb.json?count=10&callback=mycallback"></script>

//数据是/not/JSON,只是一个普通的JavaScript值。。
函数mycallback(数据){
//..并将数据转换为JSON字符串以供显示
//(`debugger`和`console.log`对于探索更有用)
警报(JSON.stringify(数据))
}

我还将代码更新为使用
mycallback
而不是
mycallback
(注意大小写差异),因为使用
callback=mycallback
执行请求会导致响应中出现
mycallback(..)
。。它永远不会调用名为
myCallback
的函数。我不知道为什么这个案例失败了——要么是一个bug,要么是Twitter API的“功能”。

jsonData
很可能是一个对象或数组。您可以在MDN文档中阅读如何使用对象和数组:,嘿@Felix Kling我一直在看你的帖子,因为我重温它将是一个数组,所以我一直在尝试访问它,正如前面所解释的。好的,我已经看到了一些动态编写URL的例子,这是典型的首选还是我最好使用JQuery?@Corey我使用JQuery,因为1)它可以工作,2)我很懒。重新解决一些问题很有趣。对我来说,这不是其中之一。(jQuery不是包装JSONP请求的唯一选项。)抱歉,另一个简单的问题是,您说数据是一个变量,为什么它不包含JSON对象?@Corey是一种文本数据表示,就像XML一样。然而,这里的
数据
表示一个真实的JavaScript值/对象。如果是JSON(在字符串中),那么您需要执行如下操作:
var data=JSON.parse(jsonData)
将数据用作字符串以外的任何内容。但这不是必需的,因为JSONP将一个真实的JavaScript对象(而不是此类对象的JSON表示)传递给回调。@Corey查看响应:
mycallback({“errors”:[{“message”:“抱歉,该页面不存在”,“code”:34}]})--这是执行的真实JavaScript,“只是一个普通的函数调用”,传递“真实的JavaScript对象”。(但我发现了一个问题:它将
callback=myCallback
更改为
myCallback(…)
;我相应地更新了我的答案。)