我需要解析一个简单的json响应(来自我的rails应用程序):
[
{
"photo":
{
"updated_at":"2010-10-14T19:12:35Z",
"photo_file_size":206422,
"created_at":"2010-10-14T19:12:01Z"
}
},
{
"photo":
{
"updated_at":"2010-10-16T18:19:38Z",
"photo_file_size":83593,
"created_at":"2010-10-14T19:14:35Z"
}
}
]
我正在使用:
$(document).ready(function()
{
$.ajax({
type: "GET",
url: "http://myurl...",
dataType: "jsonp",
success: function(data){
console.log(data);
//...
});
}
});
});
firebug控制台输出表明响应正常!
如何使用函数(数据)解析所有照片块中的每个photo_file_size?
任何帮助都将受到高度赞赏: - )
答案 0 :(得分:6)
jQuery会自动将数据解析为JSON,因为您设置了数据类型。在成功方法中,您可以使用基本Javascript对photo_file_size
$(document).ready(function(){
$.ajax({
type: "GET",
url: "http://myurl...",
dataType: "json",
success: function(data){
for( var i=0; i<data.length; i++ ){
alert( data[i].photo.photo_file_size );
}
}
});
});
但是,如果您使用的是JSONP,则需要完全不同。 JSONP有一个回调函数,将在<script>
标记中提供(以避免相同的原始策略,请参阅Wiki)
<script>
function callback( data ){
for( var i=0; i<data.length; i++ ){
alert( data[i].photo.photo_file_size );
}
}
</script>
<script src="yoururltojsonp.php?callback=callback"></script>
另外,请查看jQuery's solution
答案 1 :(得分:1)
jQuery的JSON解析器是$.parseJSON()
。所以,在你的成功函数中:
var json = $.parseJSON(data);
或者,如果您没有使用json响应类型:
var json = $.parseJSON(data.responseText);
你应该好好去。
答案 2 :(得分:1)
这不是JSONP数据,这应该只是JSON。然后,您将可以访问数据,就像它是一个普通变量一样。在这种情况下,数据将是一个数组。
这假设服务器与请求JSON的服务器相同。
如果您需要JSONP数据,它应该类似于:
$callback$([
{
"photo":
{
"updated_at":"2010-10-14T19:12:35Z",
"photo_file_size":206422,
"created_at":"2010-10-14T19:12:01Z"
}
},
{
"photo":
{
"updated_at":"2010-10-16T18:19:38Z",
"photo_file_size":83593,
"created_at":"2010-10-14T19:14:35Z"
}
}
]);
$ callback $只是callback = GET变量中传递的简单打印。从本质上讲,JSONP实际上只是调用一个函数(回调)。它作为脚本标记放在DOM中,这就是它绕过跨域问题的原因。 (也许这是太多的信息:)。
答案 3 :(得分:1)
function(data)
{
for(var i=0; i<data.length; i++)
console.log(data[i].photo.photo_file_size);
}