Я пытаюсь собрать действительно простую страницу кометного теста.У меня есть главная страница клиента с идентификатором div #TextHistory.Javascript на этой странице должен создать открытое соединение с backend.php, который использует javascript для обновления значения и сброса его обратно на страницу клиента.Я действительно не уверен, что делаю все правильно ... я основал это на Как мне реализовать базовый "длинный опрос"? .
Что яНаходится на странице клиента (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 doctype, head, meta, jquery include,
затем в теле:
<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 --->