Почему мой скрипт не обновляет мой div динамически, как это должно быть? - PullRequest
1 голос
/ 25 июля 2010
<html>
<head>
<style type="text/css">
    body {
        background-color: #000000;
        font-family: Arial, Helvetica, sans-serif;
        font-size: 20px;
        text-align: center;
        color: #FFFFFF;
    }
</style>
<script type="text/javascript" src="jquery-1.4.js"></script>
<script type="text/javascript">
function sleep(ms)
{
    var dt = new Date();
    dt.setTime(dt.getTime() + ms);
    while (new Date().getTime() < dt.getTime());
}
function update() {
    while (0 < 1) {<?php $contents = file_get_contents("my url here"); 
    ?>
        var count = <?php echo $contents ?>;
        document.getElementById('div').innerHTML = count;
        sleep(1500);
    }
}
</script>
</head>
<body onload=update()>
<iframe id="iframe" src="my url" style="visibility: hidden;"/>
<table width=100% height=100%>
<tr height=80%>
<td width=100%>
<center>
<div id="div"></div>
</center>
</td>
</tr>
</table>
</body>
</html>

При просмотре исходного кода в браузере, var установлен правильно, но не установит содержимое div.Я уверен, что URL-адрес, на который указывает PHP-скрипт, является точным и содержит только скрипт для извлечения числа с внешней страницы.

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 25 июля 2010

Чтобы ответить на вопрос, почему он не работает ... ваши onload нуждаются в кавычках:

<body onload="update()">

, но другие опубликовали лучшие способы сделать это с помощью jquery.

1 голос
/ 25 июля 2010

Предполагая, что значение file_get_contents("my url here") дает 42 (например), вы знаете, что вы создаете бесконечный цикл, который будет устанавливать содержимое #div в 42 снова и снова каждые 1,5 секунд? То есть, var count всегда, постоянно будет 42 и не изменится, поскольку PHP оценивается только один раз на сервере.

Кроме того, я подозреваю, что ваша функция sleep может создать некоторую проблему, поскольку она создает еще один узкий цикл. Я не удивлюсь, если этот скрипт просто заблокирует браузер, ничего не обновляя, поскольку он зацикливается. Способ задержать выполнение в Javascript - использовать window.setTimeout или window.setInterval.

Я думаю, что вы ищете какое-то AJAX-решение, если вы скажете нам, что именно вы хотите сделать. Поскольку вы включаете jQuery (фактически не используя его), вам следует взглянуть на jQuery.get() в сочетании с setInterval, чтобы периодически обновлять div.

Что-то вроде:

window.setInterval(function () {
    $.get("my url here", function (data) {
        $('#div').html(data);
    });
}, 1500);
0 голосов
/ 25 июля 2010
var count = <?php echo $contents ?>;
document.getElementById('div').innerHTML = count;

Вы запрашиваете у веб-сервера переменную $ content через php, которая всегда будет статическим числом, если вы не перезагрузите страницу.Попробуйте использовать jQuery, как указано выше.

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