использование переменной в DATA функции обратного вызова getJASON - PullRequest
2 голосов
/ 07 июня 2010

Моя проблема заключается в управлении кодом, который получает тег и использует его как переменную (var searchterm = ??????).С помощью JSON я сначала хочу получить теги "location" с тегом и показать соответствующие фотографии с 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> 

1 Ответ

2 голосов
/ 07 июня 2010

Второй запрос $.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;
          });
        });
});

EDIT:

Вот версия, которая использует $.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;
              });
          });
    }
});

EDIT:

Я изменил строку var searchterm = выше, поскольку возвращаемый объект данных намного сложнее, чем предлагалось в вашем исходном коде.

Вам нужно:

var searchterm=data.memes[0].dimensions.location[0];

... потому что данные, возвращенные из 1-го запроса, выглядят так:

{"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"]
                            }
            }
        ]
}​
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...