Я пытаюсь собрать действительно простую страницу теста кометы. У меня есть главная страница клиента с идентификатором div #TextHistory. Javascript на этой странице должен создать открытое соединение с backend.php, которое использует javascript для обновления значения и сброса его обратно на страницу клиента. Я действительно не уверен, что я вообще делаю это правильно ... я основал его на How do I implement basic "Long Polling"?.Длинный опрос/комет php backend не очищает правильные данные - Newbie Question
Что я нахожу на странице клиента (FireFox), похоже, что backend.php ничего не возвращает и истекает через 10 секунд. Если я выберу петлю php в backend.php, она будет возвращать значение «DefaultData» и добавляет прямо в TextHistory DIV. Я чувствую, что я рядом, но что-то не так. Извините за странное форматирование здесь, похоже, что некоторые заголовки и теги php недопустимы.
стороны клиента:
$(document).ready(function() {
waitForMsg(); /* Start the inital request */
});
function addmsg(type, msg){
/* Simple helper to add a div.
type is the name of a CSS class (old/new/error).
msg is the contents of the div */
$("#TextHistory").append(
"<div class='msg "+ type +"'>New MSG: "+ msg +"</div>"
);
}
function waitForMsg(){
/* This requests the url "msgsrv.php"
When it complete (or errors)*/
$.ajax({
type: "GET",
url: "backend.php",
async: true, /* If set to non-async, browser shows page as "Loading.."*/
cache: false,
timeout:50000, /* Timeout in ms */
success: function(data){ /* called when request to barge.php completes */
addmsg("new", data); /* Add response to a .msg div (with the "new" class)*/
setTimeout(
'waitForMsg()', /* Request next message */
1000 /* ..after 1 seconds */
);
},
error: function(XMLHttpRequest, textStatus, errorThrown){
addmsg("error", textStatus + " (" + errorThrown + ")");
setTimeout(
'waitForMsg()', /* Try again after.. */
"15000"); /* milliseconds (15seconds) */
},
});
};
</script>
</head>
<body>
<div id="container">
<div id="main">
<h2>Text Scrolling Test</h2>
<div id="TextHistory">
<p>First default line of text</p>
<p>Second default line of text</p>
</div>
</div>
</div>
</body>
</html>
backend.php, который называется:
<---php start --->
session_start();
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 2012 05:00:00 GMT");
flush();
<---php end --->
то по умолчанию HTML доктайпа, головы, мета, JQuery включают,
затем в организме:
<div id="LastMsg">DefaultData</div>
<---PHP Start --->
$OutputMsg = "Initial";
while (true) {
$OutputMsg .= "Something.";
echo "
<script type=\"text/javascript\">
$('#LastMsg').html(\"<p>$OutputMsg</p>\");
</script>
";
flush(); // Ensure the Javascript tag is written out immediately
sleep(1);
}
<---PHP END --->
Возможно ли задействовать javascript/jQuery на сервере? Кроме того ... это только для теста, поэтому я могу получить представление о том, как работает комета, это не приводит к действию для реального мира. Я ценю комментарии, советующие не делать этого. –