Запрос JSon / Jquery с setTimeout всегда возвращает «нулевой» результат? (для API поиска в Твиттере) - PullRequest
1 голос
/ 18 марта 2010

Я звоню в твиттер API. Получено 100 сообщений + свойства, которые говорят мне, какова следующая страница для вызова. Так что жду 5 сек. и вызвать эту следующую страницу, но JSon приводит к тому, что функция обратного вызова всегда становится пустой во второй раз ... Я думаю, что это, вероятно, проблема JQuery ...

Вот код, чтобы проверить его, если хотите:

<html>
<head>
<script type="text/javascript" src="./jquery-1.4.2.min.js"></script>
<script>
function test() {
    var rqUrl = "http://search.twitter.com/search.json?q=%23apple+OR+%23ipad&rpp=100&callback=?"
    callTwitterSearchApi(rqUrl);
}

function callTwitterSearchApi(tiwtterRequestUrl) {
    debug("request to twitter : " + tiwtterRequestUrl);

    // *** FIRST CALL WORKS GREAT... ***
    $.getJSON(tiwtterRequestUrl, callTwitterSearchApi_callback);
}

function callTwitterSearchApi_callback(jsonPostsResults) {
    debug("callback");

    if (jsonPostsResults == null) {
    debug("Why is jsonPostsResults null? If I copy paste the request inside a browser, I get something =(");
    return; 
    }

    if (jsonPostsResults.error != undefined && jsonPostsResults.error != "") {
        debug("twitter api error");
    }
    var posts = new Array();
    $(jsonPostsResults.results).each(function() {       
        posts.push(this);
    }); 

    debug("Number of posts : " + posts.length);

    if (jsonPostsResults.next_page != undefined && jsonPostsResults.next_page.trim() != "") {        
        debug("calling next request in 5 sec..."); 
            // *** WHEN COMMING BACK FROM THAT LINE, JSON RESULTS == NULL?! ****
        setTimeout("callTwitterSearchApi(\"http://search.twitter.com/search.json" + jsonPostsResults.next_page + "\")", 5000); 
    }

}

function debug(message) {
    document.getElementById('debug').innerHTML = message + "\n" + document.getElementById('debug').innerHTML;
}
</script>
</head>
<body>
<input type="button" onclick="test();" value="test" /><br />
<textarea id="debug" cols="80" rows="20"></textarea>
</body>
</html>

Итак, в строке 20 при втором обратном вызове (обратно из setTimeout) параметр «jsonPostsResults» всегда возвращается как ноль ... Я понятия не имею, почему. Если я скопирую этот второй запрос в браузер, он вернет 100 результатов. У кого-нибудь была такая проблема с функциями Ajax / JQuery при вызове его с помощью setTimeout?

1 Ответ

0 голосов
/ 18 марта 2010

Это потому, что вы не указали '& callback =?' по второму запросу

Исправлена ​​ошибка: setTimeout ("callTwitterSearchApi (\" http://search.twitter.com/search.json" + jsonPostsResults.next_page + "& callback =? \") ", 5000);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...