2016-01-16 4 views
1

Возможны ли это, что если значение $ нового изменяется, то вар функции updateChart перезагрузки снова и снова он идет к проверочной функции вара и снова есть такое же состояние на нем.Использование SetInterval когда условие Если это правда

var updateInterval = 3000; 
    var updateChart = function() { 
     var check = function() { 
     if(<?php echo $new; ?>).change(function(){ 
      setInterval(function(){updateChart()}, 1000); 
     }); 
     } 
    dps.push(<?php echo $str; ?>); 
    chart.render(); 
}; 

Будет оценен Спасибо.

+0

Этот код для меня не имеет смысла: вы должны знать, что части PHP исполняются и выходят из системы сразу после создания страницы, поэтому элемент '$ new' никогда не будет обновляться через PHP. Блок 'if(). Change()' немедленно будет запущен, потому что он вызовет событие изменения, а затем выполнит внутренний код. Вы определяете функцию, называемую 'check()', но в вашем опубликованном коде вы ее не выполняете. – SaschaM78

+0

Да, я получаю проблему в функции '.change()', но для этого, как я могу использовать этот оператор, когда значение '$ new' изменяется, что означает, что число num_rows увеличивается только тогда, когда будет выполняться функция UpdateChart. – Lakshya

+0

Я все еще не уверен, правильно ли я получил вас, но я дам вам ответ, который, надеюсь, подходит. – SaschaM78

ответ

1

Итак, вы хотите обновить график, как только какое-то значение было написано на стороне сервера, правильно? Как упоминалось в моем комментарии, использование инструкций PHP в вашем блоке JS не будет работать, поскольку PHP-код будет запущен при загрузке страницы и впоследствии не изменится. Вместо этого, вы должны использовать двухступенчатый подход:

  • Используйте повторяющееся AJAX вызова для опроса изменений
  • Создать PHP-страницу, которая сообщает об изменениях

JS код (с использованием Jquery):

window.setInterval(function() { 
    $.ajax('change-listener.php', { 
    success: function(data) { 
     if (data.changed) { 
     for(var i in data.newValue) { 
      dps.push(data.newValue[i]); 
     } 
     chart.render(); 
     } 
    } 
    }); 
}, 3000); 

Проверить белый ICH строки были написаны в заданный промежуток времени (если ваш таблицу, правильные записи в имеет метку времени) и возвращает соответствующие значения с помощью JSON для сценария JS:

PHP код:

$query= 'SELECT strValue FROM [YOURTABLE] WHERE created > DATE_SUB(now(),INTERVAL 3 SECOND)'; 

$data= array(); 
if ($result = $mysqli->query($query)) { 
    if (mysqli_num_rows($result)) { 
     $data['changed']= TRUE; 
     while($obj = $result->fetch_object()){ 
      $data['newValues'][]= $obj->strValue; 
     } 
    } else { 
     $data['changed']= FALSE; 
    } 
} 
$result->close(); 

header('Content-Type: application/json'); 
print json_encode($data); 

альтернативным способом было бы сохранить вновь созданные значения в сеансе пользователя:

PHP код, часть 1 (внутри скрипта, который обрабатывает хранящий O F новые значения):

session_start();  
$_SESSION['newValues'][]= $str; 

PHP код, часть 2 (вместо опроса базы данных, опрашивать сессии):

session_start(); 
if (isset($_SESSION['newValues'])) { 
    $data['changed']= TRUE; 
    $data['newValues']) $_SESSION['newValues']; 
    unset($_SESSION['newValues']; 
} else { 
    $data['changed']= FALSE; 
} 

Второй подход представляет собой чистый сценарий однопользовательского: как в скором времени, когда скрипт PHP проверяет изменения, изменения возвращаются один раз, а затем список изменений сбрасывается, чтобы никогда не возвращать одинаковые значения дважды.

+0

Спасибо за то, что вы дали так хорошо Отвечайте, я действительно ценю вас за это. но теперь проблема заключается в том, что я делаю графики для совпадения в реальном времени в корзине, для которых я представляю формат времени как '[{" x ": new Date (0000,00,00,00,00,30)," y " : 2}, ' и если я конвертирую это в EncodeJson, то он отображает ' [{"x": "new Date (0000,00,00,00,00,30)", "y": 2} , ' , который canvas JS не выбирает формат, поэтому я использую' preg_replace', чтобы удалить двойные кавычки, а затем я снова попытался отобразить диаграмму. – Lakshya

+0

. Я знаю, что это похоже на сложную задачу. Мы можем сделать TeamViewer, чтобы я мог показать вам от чего я действительно страдаю. Если бы мы могли сделать TeamViewer, пожалуйста, сообщите мне об этом. – Lakshya

+0

Извините, у меня в настоящее время нет TeamViewer. Кажется, вы снова смешиваете языки, и вам никогда не следует передавать что-либо в качестве строки, которая должна быть преобразована на принимающей стороне с помощью таких средств, как 'eval()', что в какой-то момент приведет к проблемам. Вместо этого создайте дату на стороне сервера (например, '$ date = new Date();') и передайте это вместе со своими данными JSON ('print json_encode (array ('x' => $ date, 'y' => 2)); '). – SaschaM78

Смежные вопросы