#javascript #php
#javascript #php
Вопрос:
Как мне проверить значение в php скрипте на предмет изменения с помощью javascript?
Я хотел бы сделать что-то вроде:
<script type="text/javascript"><!--
var innitialID = get_file_contents(lastPresentID.php); //get_file_contents(lastPresentID.php);
function myTimeout() {
var freshestID = get_file_contents(lastPresentID.php);
if(freshestID != innitialID) {
location.reload();
}
setTimeout(myTimeout, 5000);
}
window.onload = myTimeout;
</script>
php скрипт генерирует единственное целое число, которое является последним идентификатором таблицы.
Спасибо!
Комментарии:
1.
get_file_contents
не является функцией JavaScript2. Что делает функция get_file_contents? Является ли это функцией js с вызовом ajax?
3. Хорошо, но знаете ли вы, как заменить им реальный javascript? Я хотел бы узнать, как это сделать правильно
4. Вы хотите посмотреть на что-то под названием AJAX
5. @CorCool: AJAX является частью JavaScript. Это также именно то, о чем вы нас просите. В вашей книге по JavaScript это должно быть описано; какой из них вы используете?
Ответ №1:
<script type="text/javascript">
window.onload = doAjax(true);
setInterval(doAjax, 5000);
var initialID = -1, freshestID;
function doAjax(initial) {
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest(); // code for IE7 , Firefox, Chrome, Opera, Safari
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); // code for IE6, IE5
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 amp;amp; xmlhttp.status == 200){
if(initial) {
initialID = xmlhttp.responseText;
} else {
freshestID = xmlhttp.responseText;
if (initialID != freshestID)
location.reload();
}
}
}
xmlhttp.open("GET", "lastPresentID.php", true);
xmlhttp.send();
}
</script>
Вот так, обновлены вызовы ajax. Сначала устанавливает переменную initialId, затем каждые 5 секунд запускается интервальный код, который обновляет переменную freshestId и выполняет сравнение.
РЕДАКТИРОВАТЬ: код теперь не дублируется.
Комментарии:
1. 1. Массовое дублирование кода. 2. Удалите свой старый неправильный ответ.
2. @AshleyMedway 1. OP не использует никакой библиотеки ajax, поэтому немного дублированного кода на чистом javascript может помочь ему чему-то научиться. 2. Есть комментарии к предыдущему ответу, которые могут быть полезны для понимания этого ответа. 3. Если вы не собираетесь быть конструктивным, прекратите троллить 🙂
3. Я веду себя очень конструктивно, вам не нужна библиотека AJAX для написания кода, который не дублируется. Смотрите: jsfiddle.net/FDyf8
4. @AshleyMedway — это не работает, ваш код не имеет возможности узнать, какую переменную он обновляет. Вы просто предупреждаете их, но не устанавливаете oldvar и newvar, их нельзя сравнивать. Для оператора, который надеялся изучить какой-нибудь рабочий JS, все вернулось на круги своя.
5. @Husman Я попробовал этот код внизу моей страницы. Пока это не работает. Но это намного сложнее, чем я ожидал … вау.
Ответ №2:
Приведенный ниже код при загрузке будет присваиваться oldVal
. Затем использование setInterval
будет обновляться newVal
каждые 5 секунд и проверять, newVal != oldVal
.
Он получает значения от lastPresentID.php
использования AJAX.
var oldVal = 0;
var newVal = 0;
function loadXMLDoc(old) {
var xmlhttp;
if (window.XMLHttpRequest) {
// code for IE7 , Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 ) {
if(xmlhttp.status == 200){
if(old)
{
oldVal = xmlhttp.responseText;
}
else
{
newVal = xmlhttp.responseText;
if(newVal != oldVal)
alert("test");
}
}
else if(xmlhttp.status == 400) {
alert('There was an error 400')
}
else {
alert(xmlhttp.status)
}
}
}
xmlhttp.open("GET", "lastPresentID.php", true);
xmlhttp.send();
}
function timeout() {
loadXMLDoc(false);
}
loadXMLDoc(true);
setInterval(timeout, 5000);