Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Парсинг картинки из google на лету. (https://javascript.ru/forum/misc/48387-parsing-kartinki-iz-google-na-letu.html)

ingod 02.07.2014 01:44

Парсинг картинки из google на лету.
 
Здравствуйте.

Опишу саму задачу:
Пользователь вводит на сайте запрос, ему выдается страница (точнее она не выдается, а появляется из display:none, т.е. фактически он остается на той же страницу) с запросом и картинкой. Картинка берется по запросу из гугла.

Все уже реализовано, но проблема! На сайте не работает. А локально (если просто документ html открыть) - работает, и только в хроме.
Вот часть кода:
google.setOnLoadCallback(function()
{
var imgname = document.getElementById('ид инпута').value;
var image_key=encodeURIComponent(imgname);
function getimage(id) {
   $('#imgbook')['attr']('src', './progress.gif');
   $['getJSON']('http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=' + image_key + '&rsz=2&imgsz=medium&callback=?', function (json) {
       $('#imgbook')['attr']('src', (json['responseData']['results'][id]['url']));
       $('#imgbook')['error'](function () {
           getimage(id + 1);
       });
   });
};
getimage(0);
});

А в html просто выводится:
<img id="imgbook" width="200" src="">



Я заметил, что проблема именно из-за того, что картинка берется по запросу, который введет пользователь.
Если задать переменную сразу (например var = 'запрос для картинки';) то все нормально.


Вторые сутки вожусь, не могу никак сделать. Пожалуйста, выручайте.

Aetae 02.07.2014 03:00

ingod,
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>

<script>
$(function(){
  var imgname = document.getElementById('ид инпута').value;
  var image_key=encodeURIComponent(imgname);
  
  function getimage(id) {
     $('#imgbook')['attr']('src', './progress.gif');
     $['getJSON']('http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=' + image_key + '&rsz=2&imgsz=medium&callback=?', function (json) {
         $('#imgbook')['attr']('src', (json['responseData']['results'][id]['url']));
         $('#imgbook')['error'](function () {
             getimage(id + 1);
         });
     });
  };
  getimage(0);
});


</script>
<input id="ид инпута" value="1" >
<img id="imgbook" width="200" src="">

Всё работает.
Скорее всего проблема в google.setOnLoadCallback - хз когда он должен срабатывать, видать не тогда когда готово всё...

ingod 02.07.2014 12:02

Да он то работает, но все равно проблема таже. В вашем варианте значение инпута уже дано изначально, а оно будет вводиться пользователем. И вот тогда то и не работает.

Цитата:

Скорее всего проблема в google.setOnLoadCallback - хз когда он должен срабатывать, видать не тогда когда готово всё...
А можно его как-то заставить по другому работать? Или какие-то есть еще варианты?

ingod 02.07.2014 12:16

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>

<script>
$(function(){
  var imgname = document.getElementById('focusedInput').value;
  var image_key=encodeURIComponent(imgname);
  
  function getimage(id) {
     $('#imgbook')['attr']('src', './progress.gif');
     $['getJSON']('http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=' + image_key + '&rsz=2&imgsz=medium&callback=?', function (json) {
         $('#imgbook')['attr']('src', (json['responseData']['results'][id]['url']));
         $('#imgbook')['error'](function () {
             getimage(id + 1);
         });
     });
  };
  getimage(0);
});

</script>
<input id="focusedInput" value="сиськи" >
<button type="submit" id="find-file">Поиск</button>

<img id="imgbook" width="200" src="">

Вот как заставить работать? Чтобы по нажатию поиска, картинка новая бралась, на основе введенного запроса?

Aetae 02.07.2014 13:39

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
 
<script>
$(function(){
  $('#find-file').click(function(){
    getimage(0, encodeURIComponent($('#focusedInput').val()));
  });

  function getimage(id, image_key) {
     $('#imgbook')['attr']('src', './progress.gif');
     $['getJSON']('http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=' + image_key + '&rsz=2&imgsz=medium&callback=?', function (json) {
         $('#imgbook')['attr']('src', (json['responseData']['results'][id]['url']));
         $('#imgbook')['error'](function () {
             if(json['responseData']['results'][++id]) getimage(id, image_key); //проверка, чтоб небыло бесконечного цикла
         });
     });
  };
});
 
</script>
<input id="focusedInput" value="сиськи" >
<button type="submit" id="find-file">Поиск</button>
 
<img id="imgbook" width="200" src="http://javascript.ru/forum/images/smilies/smile.gif">

ingod 02.07.2014 14:14

Aetae, спасибо!
Так гораздо лучше.

ingod 02.07.2014 17:51

У меня еще вопрос появился.
Как теперь получить url новой картинки и задать его в переменную?

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
 
<script>
$(function(){
  $('#find-file').click(function(){
    getimage(0, encodeURIComponent($('#focusedInput').val()));
  });

  function getimage(id, image_key) {
     $('#imgbook')['attr']('src', './progress.gif');
     $['getJSON']('http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=' + image_key + '&rsz=2&imgsz=medium&callback=?', function (json) {
         $('#imgbook')['attr']('src', (json['responseData']['results'][id]['url']));
         $('#imgbook')['error'](function () {
             if(json['responseData']['results'][++id]) getimage(id, image_key); //проверка, чтоб небыло бесконечного цикла
         });
     });
  };
});

var imgurl = $("#imgbook").val();
$("#img-url").text(imgurl);
</script>
<input id="focusedInput" value="сиськи" >
<button type="submit" id="find-file">Поиск</button>
 
<img id="imgbook" width="200" src="http://javascript.ru/forum/images/smilies/smile.gif">
<br>
<tr>
					<td>Url картинки</td>
					<td id="img-url"></td>					
				  </tr>


Доработайте пожалуйста. У меня получалось сделать, но выводился ./progress.gif, а не новая.


Часовой пояс GMT +3, время: 21:29.