Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.01.2016, 14:49
Новичок на форуме
Отправить личное сообщение для serega_pte Посмотреть профиль Найти все сообщения от serega_pte
 
Регистрация: 31.01.2016
Сообщений: 6

Сохранение строки в переменной. Сравнение строк.
Всем привет. Прошу помощи в решении следующей задачи.
Есть скрипт, который вызывается по таймеру с определенным интервалом.
В данном скрипте я получаю строку в формате json, после чего пытаюсь выполнить условие по сравнению строк. Идея этого условия следующая:
Если строка отличается от строки, которую мы получили перед этим, мы вызываем еще одну функцию.
Вот такой код я слепил:
function show(){
		$.ajax({
		url: "alarms.php",
		method:"POST",
		dataType: "json",
		success: function (data) {
                var myVar;
                      if(data) {                  
                            if (myVar!=data["All_Alarms"]){
                           myVar=(data["All_Alarms"]);   
                           alarms();                 //вызов другой функции
                           }
                        }
                    }
                 });
      }
   	show();
	setInterval('show()',5000);


От этого кода я ожидал следующего поведения: при первом вызове в переменную myVar запишется содержимое строки из (data["All_Alarms"]);
А при следующем вызове myVar будет равен (data["All_Alarms"]);
Но на практике я получаю каждый раз, что содержимое переменных не равно! Выяснил, что при каждом вызове функции переменная myVar создается заново, по этому она каждый раз пустая.

Подскажите пожалуйста, как заставить переменную myVar хранить предыдущую строку из (data["All_Alarms"]);
Ответить с цитированием
  #2 (permalink)  
Старый 01.02.2016, 00:07
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от serega_pte
Выяснил, что при каждом вызове функции переменная myVar создается заново, по этому она каждый раз пустая.
А чего выяснять то, если это черным по белому написано:

success: function (data) {
var myVar;

по окончании каждого ajax запроса выполняется функция, в которой объявляется переменная. Объявляйте ее глобальной вне рамок запроса.
Ответить с цитированием
  #3 (permalink)  
Старый 01.02.2016, 09:50
Новичок на форуме
Отправить личное сообщение для serega_pte Посмотреть профиль Найти все сообщения от serega_pte
 
Регистрация: 31.01.2016
Сообщений: 6

Сообщение от laimas Посмотреть сообщение
по окончании каждого ajax запроса выполняется функция, в которой объявляется переменная. Объявляйте ее глобальной вне рамок запроса.
Хорошо, объявил переменную глобально, но все равно условие в функции выполняется каждый раз.
Получается, что каждый раз myVar != (data["All_Alarms"]);
var myVar;
function show(){
		$.ajax({
		url: "alarms.php",
		method:"POST",
		dataType: "json",
		success: function (data) {
                            if(data) {                  
                            if (myVar!=data["All_Alarms"]){
                           myVar=(data["All_Alarms"]);  
                           alarms();                 //вызов другой функции
                           }
                        }
                    }
                 });
      }

   	show();
	setInterval('show()',5000);
Ответить с цитированием
  #4 (permalink)  
Старый 01.02.2016, 10:17
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

if (myVar!=data["All_Alarms"]){
myVar=(data["All_Alarms"]);

Почему сохранение только при неравенстве?
Ответить с цитированием
  #5 (permalink)  
Старый 01.02.2016, 10:43
Новичок на форуме
Отправить личное сообщение для serega_pte Посмотреть профиль Найти все сообщения от serega_pte
 
Регистрация: 31.01.2016
Сообщений: 6

Сообщение от laimas Посмотреть сообщение
if (myVar!=data["All_Alarms"]){
myVar=(data["All_Alarms"]);

Почему сохранение только при неравенстве?
Потому что надо вызывать другую функцию, только если строка не равна!
А что даст сохранение при равенстве?

ПС: Вот только что попробовал, ничего это не дает к сожалению.
Ответить с цитированием
  #6 (permalink)  
Старый 01.02.2016, 11:00
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от serega_pte
А что даст сохранение при равенстве?
А с чем же вы тогда сравнивать собираетесь? В таком случае определенный набор данных совсем не нужен.

<?
if($_POST) {
    $a = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff'];
    shuffle($a);
    exit($a[0]);
}
?>
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script> 
$(function() {
    var m;
    $('button').click(function() {
        $.post(location, {a: 1}, function(d) {
            alert('Memory: '+m+'\n'+'New: '+d+'\n'+(m != d))
            m = d;    
        })
    })
});
</script>     
</head> 
<body>
<button>GO</button>
</body> 
</html>


Запустить. Есть случаи совпадения/не совпадения?
Ответить с цитированием
  #7 (permalink)  
Старый 01.02.2016, 12:26
Аватар для DynkanMaclaud
Профессор
Отправить личное сообщение для DynkanMaclaud Посмотреть профиль Найти все сообщения от DynkanMaclaud
 
Регистрация: 08.08.2014
Сообщений: 261

serega_pte,
а вы после if (myVar!=...) {} забыли скобочки поставить...
Ответить с цитированием
  #8 (permalink)  
Старый 01.02.2016, 13:09
Новичок на форуме
Отправить личное сообщение для serega_pte Посмотреть профиль Найти все сообщения от serega_pte
 
Регистрация: 31.01.2016
Сообщений: 6

laimas
Дело было немного в другом.
Вот теперь код выглядит вот так:
if(data) {                  
if (myVar!=data["All_Alarms"]){
myVar=''+(data["All_Alarms"])+'';
alarms();                 //вызов другой функции


Получается, что мы из json получали текст и пытались его записать как массив. Взяв все это дело в ' ' получили то что хотели!
Спасибо за подсказку с глобальной переменной.
Ответить с цитированием
  #9 (permalink)  
Старый 01.02.2016, 13:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от serega_pte
Получается, что мы из json получали текст и пытались его записать как массив.
Это уже ваши глюки, никто кроме вас не знает, что у вас есть data["All_Alarms"], и что с чем в конечном итоге вы сравниваете. Хотя черным по белому пишется - запишется содержимое строки из (data["All_Alarms"]).

А вот то что у вас некие данные "выпадают" из сравнения, это факт. У меня пример со случайной выборкой перемешиваемых данных и в нем это по теории вероятности когда будет более тех или иных совпадений, но если брать реальные записи как есть, то значит некоторые будут вообще отброшены. Хотя это я так предполагаю, а у вас может быть опять что-то никому неизвестное.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение двух одинаковых строк - false kweb Общие вопросы Javascript 10 02.02.2015 18:29
Сравнение двух строк drac0Sha Общие вопросы Javascript 17 20.08.2012 19:45
По формированию селектора jquery из строки и переменной bartonom jQuery 1 14.02.2012 10:18
Создание имени переменной из строки Kiomot Events/DOM/Window 7 14.07.2011 11:42
Сравнение строк по алфавиту Alex VoDevil Общие вопросы Javascript 6 25.02.2010 02:04