PHP возвращает значение в значение div - PullRequest
1 голос
/ 23 марта 2012

Здравствуйте, у меня проблемы с передачей значения php, возвращаемого в метод innerHTML, чтобы изменить значение моего div на фиксированном интервале.

это мой код, я включаю файл php, содержащий метод, а затемсоздайте объект класса, содержащего метод, затем я хочу передать возвращаемое значение в функцию innerHTML.но это не работает.

var t = setInterval(function() {
  document.getElementById("content").innerHTML = "\
    <? include_once("php/functions.php");         \
       $cont = new Content();                     \
       echo ($cont->getPosts());                  \
    ?>";
}, 1000);

Однако это работает, так что значение php может быть выведено в функцию innerHTML.

var t = setInterval(function() {
  document.getElementById("content").innerHTML = "<? echo "Some Text"; ?>";
}, 1000);

в выражении <? include_once("php/functions.php"); $cont = new Content(); echo ($cont->getPosts());?> нет замечаний,потому что, когда я помещаю его вне тегов <script>, он делает то, что ему нужно, однако он не обновляется каждые несколько секунд

заранее спасибо, я пытался сделать вопрос как можно более понятным, если у вас естьвопросы, однако, просто спросите.

1 Ответ

1 голос
/ 23 марта 2012

Я подозреваю, что вы подразумеваете под "не работает", это то, что он только выдает то же самое каждую секунду.Это потому, что PHP запускается на стороне сервера ДО того, как браузер получит какой-либо HTML, и это заставляет код выглядеть примерно так, когда он поступает в браузер:

var t = setInterval(function(){document. getElementById("content"). innerHTML = "whatever php produced";}, 1000);

Это означает, что ваш браузер простовставляйте статический текст «что бы ни создавал php» в ваш div каждый раз, когда срабатывает интервал.

Чтобы решить эту проблему, вам потребуется немного другой подход.Используйте AJAX, чтобы запросить обновленную версию из PHP-скрипта, который возвращает только то, что предполагается внутри div.jQuery имеет функцию, которая может сделать это для вас, если вы сами не знакомы с AJAX.

var t = setInterval( function(){$( '#content' ).load( '/url/to/serverside/script.php' )}, 1000 );

Также помните, что AJAX асинхронный, что означает, что статическая синхронизация - плохая идея.Вместо этого вы должны использовать функцию «при завершении» для запуска следующей загрузки.

function loadContent() {
    $('#content').load( '/url/to/serverside/script.php', function( r, s, x ) {
          setTimeout( loadContent, 1000 );
    });
}

loadContent();

Серверный скрипт может быть чем-то похожим на то, что у вас изначально было:

<?
include_once("php/functions.php");
$cont = new Content();
echo ($cont->getPosts());
?>

Ссылка: http://api.jquery.com/load/

...