Сохранение строки в переменной. Сравнение строк.
Всем привет. Прошу помощи в решении следующей задачи.
Есть скрипт, который вызывается по таймеру с определенным интервалом. В данном скрипте я получаю строку в формате 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"]); |
Цитата:
success: function (data) { var myVar; по окончании каждого 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); |
if (myVar!=data["All_Alarms"]){
myVar=(data["All_Alarms"]); Почему сохранение только при неравенстве? |
Цитата:
А что даст сохранение при равенстве? ПС: Вот только что попробовал, ничего это не дает к сожалению. |
Цитата:
<? 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> Запустить. Есть случаи совпадения/не совпадения? |
serega_pte,
а вы после if (myVar!=...) {} забыли скобочки поставить... |
laimas
Дело было немного в другом. Вот теперь код выглядит вот так: if(data) { if (myVar!=data["All_Alarms"]){ myVar=''+(data["All_Alarms"])+''; alarms(); //вызов другой функции Получается, что мы из json получали текст и пытались его записать как массив. Взяв все это дело в ' ' получили то что хотели! Спасибо за подсказку с глобальной переменной. |
Цитата:
А вот то что у вас некие данные "выпадают" из сравнения, это факт. У меня пример со случайной выборкой перемешиваемых данных и в нем это по теории вероятности когда будет более тех или иных совпадений, но если брать реальные записи как есть, то значит некоторые будут вообще отброшены. Хотя это я так предполагаю, а у вас может быть опять что-то никому неизвестное. |
Часовой пояс GMT +3, время: 22:12. |