从PHP调用JS函数while循环以获取twitter hashtag计数

时间:2013-04-06 18:18:21

标签: php javascript jquery twitter hashtag

以下是我的PHP代码:

<tr  <?php echo $backclr; ?>>                            
    <td class="hashtd"><a href="#"><?php echo "#" . $row['hashtag']; ?></a></td>
    <td class="hashtd">                                    
        <script type = "text/javascript">
            submitTerms("<?php echo $row['hashtag']; ?>", "1", "2");
        </script>
        <div id="totalTweets<?php echo $row['hashtag']; ?>"><span></span></div>
        <div class="loading"><img src="img/preloader.gif"/></div>                                    
    </td>
</tr>

<?php
endwhile; ?>

这里我调用javascript函数submitTerms();并在该函数中传递php参数。

以下是javascript代码:

<script type="text/javascript">

            var getPage = new RegExp( /page=([^&]+)/ );
            var url = "http://search.twitter.com/search.json?q=";
            var search, page, pageTotal, tweets, loading;
            var beforeCounter = "<b>";
            var afterCounter = "</b>";
            var totalTweets = 0;

            function getTweets(search, page, pageTotal) {
                $.getJSON( url + search + '&page=' + page + '&callback=?',
                function(data) {
                    if( data.results.length != 0 && page != pageTotal ) {
                        //$('#pagesDone span').html(page);
                        getData(data);
                    }
                    else {
                        showTotal(search);
                    }
                }
            );
            }

            function showTotal(search) {
                $('#totalTweets'+search+' span').html(beforeCounter + totalTweets + afterCounter);
                totalTweets = 0;
                loading = false;
            }

            function getData(data) {
                tweets = data.results;
                totalTweets += tweets.length;
                nextPage = getPage.exec(data.next_page);
                if( nextPage == null ) {
                    showTotal();
                    return;
                }
                nextPage = nextPage[1];
                getTweets(search, nextPage, pageTotal);
            }

            function submitTerms(query, pg, pgtot) {

                $('#totalTweets'+query+' span').html('');

                search = query;
                page = pg;
                pageTotal = pgtot;

                if( search == '' ) {
                    alert('No search query found');
                    return;
                }
                loading = true;                
                getTweets(search, page, pageTotal);
            }

            function status() {
                if( loading ) $('.loading').show();
                else $('.loading').hide();
            }

            $(function() {
                loading = false;
                setInterval(status, 10);
            });
        </script>

上面的javascript返回了twitter标签计数。但是我想要<td><div id="totalTweets<?php echo $row['hashtag']; ?>"></td>中每一行的哈希计数。另外我在div标签中使用不同的id来获取它。

问题是它只显示最后一行的计数而不是所有行。示例:如果数据库中有5条记录,则其显示的主题标签仅计入最后一行。当我调试代码时,它显示所有主题标签的计数,但最终的渲染只是最后一行而不是所有行。

问题出在哪里?需要帮助。

1 个答案:

答案 0 :(得分:0)

您正在致电

submitTerms("<?php echo $row['hashtag']; ?>", "1", "2");

转换为

submitTerms("movies", "1", "2");

(电影是一个例子)

javascript将此调用规范化为:getTweets("movies", 1, 2),其中1是页码,2是回调方法。这就是你的问题所在。您尚未定义名为“2”的回调方法。

如果不这样做,返回的JSON将包含一个名为“results”的数组键,它本身就是一个包含结果集的数组。 您可以通过正确定义$.getJSON方法来访问此结果集。第二个参数是发送到服务器的数据,而不是从服务器返回的数据,这个数据存储在第三个参数中,请参阅:http://api.jquery.com/jQuery.getJSON/