我的问题是管理获取标记的代码,并将其用作变量(var searchterm = ??????)。使用JSON,我想首先使用标记获取“位置”标记,并显示来自 flickr 的相关照片。
<!DOCTYPE html>
<html>
<head>
<style>img{ height: 100px; float: left; }</style>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
</head>
<body>
<div id="images">
</div>
<script>
$.getJSON("http://tagthe.net/api/?url=http://www.knallgrau.at/en&view=json&callback=MyFunc",function(data){
var searchterm=data[location];
});
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags="+searchterm+"&tagmode=any&format=json&jsoncallback=?",
function(data){
$.each(data.items, function(i,item){
$("<img/>").attr("src", item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
});</script>
</body>
</html>
答案 0 :(得分:2)
第二个$.getJson()
请求在第一个完成之前运行,并且您在第一个中创建的变量无论如何都超出了第二个范围。
将第二个$.getJson()
请求置于第一个请求的回调中,以便在第一个完成之前它不会运行。
$.getJSON("http://tagthe.net/api/?url=http://www.knallgrau.at/en&view=json&callback=MyFunc",function(data){
var searchterm=data[location];
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags="+searchterm+"&tagmode=any&format=json&jsoncallback=?",
function(data){
$.each(data.items, function(i,item){
$("<img/>").attr("src", item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
});
});
修改强>
这是第一次使用$.ajax()
的版本。我直接指定了jsonp
,并删除了URL中的回调。
查看实时示例: http://jsfiddle.net/uGJYr/2/ (已更新)
$.ajax({
url:"http://tagthe.net/api/?url=http://www.knallgrau.at/en&view=json",
dataType:'jsonp',
success:function(data){
// You needed to dig deeper to get the location
var searchterm=data.memes[0].dimensions.location[0];
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags="+searchterm+"&tagmode=any&format=json&jsoncallback=?",
function(data){
$.each(data.items, function(i,item){
$("<img/>").attr("src", item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
});
}
});
修改强>
我更改了上面的var searchterm =
行,因为返回的数据对象比原始代码中建议的要复杂得多。
你需要:
var searchterm=data.memes[0].dimensions.location[0];
...因为从第一个请求返回的数据如下所示:
{"memes":[
{ "source":"http://www.knallgrau.at/en",
"updated":"Tue Jun 08 19:29:51 CEST 2010",
"dimensions":{ "topic":["content","knallgrau","overview","agency","nullItem","Deutsch","foundation","Company","management","English"],
"content-type":["text/html"],
"author":["vi knallgrau"],
"person":["dieter rappold","Dieter Rappold"],
"title":["Company - vi knallgrau"],
"location":["Austria","Vienna"],
"language":["english"],
"size":["5494"]
}
}
]
}