У меня возникли трудности с правильной загрузкой данных Twitter с помощью jsonp search.json.
Когда я получаю данные только один раз, он отлично работает с этим фрагментом кода:
function getTweets(){ $.ajax({ url: 'http://search.twitter.com/search.json', type: 'GET', dataType: 'jsonp', jsonpCallback: 'tw_callback', data: 'q=<?php echo urlencode($twitter_search); ?>+-RT&rpp=100' }); } function tw_callback(jsonp){ for( key in jsonp['results'] ) { var tweet = jsonp['results'][key]['text'] ; var from = jsonp['results'][key]['from_user']; var avatar = jsonp['results'][key]['profile_image_url']; tw_container.push([tweet,from,avatar]); } }
Но когда я пытаюсь обновить эти данные каждые xx секунд, используя setInterval:
setInterval(function () { getTweets(); }, 1000*interval_tourniquet);
К сожалению, он не работает. У меня такая ошибка:
NOT_FOUND_ERR: исключение DOM 8: Была сделана попытка ссылаться на узел в контексте, где он не существует.
в основном, я получал это каждый раз, когда я пытаюсь вызвать функцию getTweets () внутри другой функции … 🙁
Другое решение, которое я пробовал:
function getTweets(){ $.ajax({ url: 'http://search.twitter.com/search.json', type: 'GET', dataType: 'jsonp', data: 'callback=tw_callback&q=<?php echo urlencode($twitter_search); ?>+-RT&rpp=100' }); }
Таким образом, он отлично работает с моим собственным jsonp api на другом сервере, но Twitter возвращает мне мой обратный вызов дважды:
tw_callback (tw_callback ({результаты …
И строка jsonp не интерпретируется ..
Какой-нибудь намек на это, какой-нибудь намек?
Большое спасибо!
Попробуйте переписать свою функцию следующим, более простым способом.
function getTweets(){ $.ajax({ url: 'http://search.twitter.com/search.json?q=<?php echo urlencode($twitter_search); ?>&rpp=100&callback=?', dataType: 'jsonp', success: function(){ for( key in jsonp['results'] ) { var tweet = jsonp['results'][key]['text'] ; var from = jsonp['results'][key]['from_user']; var avatar = jsonp['results'][key]['profile_image_url']; tw_container.push([tweet,from,avatar]); } } }); }