я создаю блог-проект. Я хочу, чтобы каждый раз, когда создается новое сообщение, пользователю не нужно обновлять страницу, чтобы увидеть сообщение, он просто добавляется к уже существующим. это то, что я делаю сейчас
function postTin() {
$.ajax({
type:'POST',
url: "frextra.php",
data:"ins=passPost",
success: (function (result) {
$("#post").html(result);
})
})
}
postTin(); // To output when the page loads
setInterval(postTin, (5 * 1000)); // x * 1000 to get it in seconds
что я здесь делаю, так это то, что каждые 5 секунд страница переходит на перезагрузку опубликованных данных, и в этом случае она также будет добавлять недавно опубликованные
то, что я хочу, это: Я не хочу использовать таймер, я хочу, чтобы запрос загружался только при добавлении нового сообщения в базу данных. застрял здесь две недели. поискал вокруг и не нашел ничего, что могло бы помочь.
Но WebSockets в масштабе может быть очень требовательным
Вы можете проверить длительный опрос https://stackoverflow.com/questions/18560872/how-does-long-p olling-work-javascri pt



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете установить интервал, чтобы получить последний идентификатор сообщения и проверить, совпадает ли он с последним, который вы загрузили в данный момент.
$.ajax({
type: 'GET',
url: "latestpost.php",
success: (function (result) {
doStuff(result)
})
})
function doStuff(latestIdInDatabase) {
// Here you do whatever you want
// latestIdInDatabase is the latest entry, they should be integer or whatever in
// order to compare them
if (currentLatestId < r) {
/// do stuff
// Like telling the user to realod because there is a new entry
// Or make anoher call to get that from your current post to the latest
// and using jquery or any framework print it
}
}latestpost.php должен возвращать что-то вроде идентификатора последнего сообщения.
В любом случае, я думаю, как сказал Луис Фелипе Де Иисус Муньос, вам нужны веб-сокеты, или просто не перезагружайте его, люди могут использовать веб-сайт, и вы просто перезагружаетесь, ничего не говоря, сообщайте пользователю, что есть новые сообщения и чтобы их увидеть , они должны перезагрузиться.
Не знаю, как этого добиться без таймера. Итак, вот мое решение, вам нужно будет настроить свой код:
Добавьте параметр сообщения, соответствующий последней дате публикации страницы
data: "ins=passPost&date = " + $('#posts-list li:first-child').data('date')
Предположим, у вас есть что-то подобное в вашем HTML
<!-- Posts ordered from newest to oldest -->
<ul id = "posts-list">
<li data-date = "2018-03-22 15:20">
<!-- Here the Post HTML code -->
</li>
<!-- Here the remaining Posts -->
</ul>
В PHP вы берете параметр сообщения date и запрашиваете базу данных для новых сообщений, например
'... AND date_added > ' . some_db_escape($_POST['date']) . '...'
И в функции успеха ajax вам нужно будет добавить данные, поступающие из PHP
$('#posts-list').prepend(result);
Данные, отправленные PHP, должны быть строкой, подобной элементам HTML <li> выше, представляя новые сообщения от самых новых до самых старых.
<li data-date = "2018-03-23 10:43">
<!-- Here the Post HTML code -->
</li>
<li data-date = "2018-03-22 18:00">
<!-- Here the Post HTML code -->
</li>
<!-- etc. -->
Вам нужно использовать WebSockets, братан