Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не работает ajax от jQuery в IE (https://javascript.ru/forum/misc/43079-ne-rabotaet-ajax-ot-jquery-v-ie.html)

EvgLuch 21.11.2013 04:28

Не работает ajax от jQuery в IE
 
Возникла такая проблема:
Есть html-таблица, куда через ajax от jquery попадают каждую секунду данные из json-файла (php забирает данные из json и этот php уже обрабатывается и из него берутся необходимые значения). Всё работает в Firefox, Google Chrome, но в IE код не срабатывает. Версия IE восьмая, пробовалось в 7-й, 11-й - аналогично. Данные загружаются в ячейки и тут же замирают - обновление стопорится. Так же есть див, в который помещено текущее время сервера - оно тоже загружается один раз и стопорится - следущая секунда уже не рефрешится. Использую функцию getJSON. Вот часть кода для определённой части таблицы:

function getJSON(url) {
$.getJSON( url, function( data ) {
$.each( data, function( key, val ) {
$.each(val, function(k, v) {
$('#' + key + '-' + k).removeAttr('class').addClass("alert-" + v.alert).html(v.value);
if((parseFloat(v.value)) < -32000 ) {
$('#' + key + '-' + k).addClass("number").text("N/D");
};
$('#clock').html("JSON time: " + data.XBO001.DTS);
});
});
});
}


Кто-нибудь сталкивался с такой проблемой? Как её можно устранить?

EvgLuch 25.11.2013 02:55

Цитата:

Сообщение от Rise (Сообщение 282169)
Части кода не достаточно.

$(document).ready(function() {
getJSON("get_json.XBO.php");
getJSON("get_json.tgk.php");
getJSON("get_json.reg.php");
setInterval(function() {
getJSON("get_json.XBO.php");
getJSON2("get_json.tgk.php");
getJSON3("get_json.reg.php");
}, 10000);
});

function getJSON(url) {
$.getJSON( url, function( data ) {
$.each( data, function( key, val ) {
$.each(val, function(k, v) {
$('#' + key + '-' + k).removeAttr('class').addClass("alert-" + v.alert).html(v.value);
if((parseFloat(v.value)) < -32000 ) {
$('#' + key + '-' + k).addClass("number").text("N/D");
};
$('#clock').html("JSON time: " + data.XBO001.DTS);
});
});
});
}

$(document).ready(function() {

getJSON();
setInterval(getJSON2, 1000);
});

function getJSON2() {
$.getJSON( "get_json.tgk.php", function( data ) {
$.each( data, function( key, val ) {
$.each(val, function(k, v) {
$('#' + key + '-' + k).html(v.value);
if((parseFloat(v.value)) > 100.00) {
$('#' + key + '-' + k).addClass("alert-3");
}
else {$('#' + key + '-' + k).removeClass("alert-3")};
});
});
});
}

$(document).ready(function() {

getJSON();
setInterval(getJSON3, 10000);
});

function getJSON3() {
$.getJSON( "get_json.reg.php", function( data ) {
$.each( data, function( key, val ) {
$.each(val, function(k, v) {
$('#' + key + '-' + k).html(v.value);
if((parseFloat(v.value)) > 1000.00) {
$('#' + key + '-' + k).addClass("alert-3");
}
else {$('#' + key + '-' + k).removeClass("alert-3")};
});
});
});
}

рони 25.11.2013 03:14

EvgLuch,
какая версия jQuery?

EvgLuch 25.11.2013 08:59

Цитата:

Сообщение от рони (Сообщение 282572)
EvgLuch,
какая версия jQuery?

/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license */

Пробовал менять версии - не помогало. Может, шило на мыло менял. ))) Какая версия актуальная для данной ситуации, можете подсказать?

Soul D Esire 25.11.2013 10:48

А ты вешал вызов функции на кнопку, не по таймеру?
Если щелкаешь по кнопке с периодичностью в одну секунду, данные нормально обновляются? =)

рони 25.11.2013 11:29

EvgLuch,
поддержка ие была до версии 1.9.1 попробуйте jquery-migrate он возвращает поддержку старых браузеров

пример

EvgLuch 27.11.2013 01:53

Цитата:

Сообщение от рони (Сообщение 282602)
EvgLuch,
поддержка ие была до версии 1.9.1 попробуйте jquery-migrate он возвращает поддержку старых браузеров

пример

Попробовал - не помогло. :-?

EvgLuch 27.11.2013 01:55

Кто-нибудь может ещё что-нибудь предложить? :help:

Неужели нет решения для IE?

ruslan_mart 27.11.2013 10:50

EvgLuch, поставьте jQuery версии 1.8.

EvgLuch 28.11.2013 09:20

Цитата:

Сообщение от Ruslan_xDD (Сообщение 283076)
EvgLuch, поставьте jQuery версии 1.8.

Не помогает! :no: :(

EvgLuch 02.12.2013 01:40

Цитата:

Сообщение от Rise (Сообщение 283259)
EvgLuch, много дублей всего чего только можно, зачем несколько php, оптимизируйте код.

Думаете, причина проблемы с IE в не корректно написанном коде?

EvgLuch 04.12.2013 05:23

Для эксперимента убрал всё "большое" с кода и оставил минимум: html, css, собственно сам jQuery, php-скрип с запросом текущего времени (с секундами) и js-скрипт с функцией setTimeout, который раз в секунду берёт данные с php и вставляет их в див html.
Ситуация такая же! В IE 8,9,10 обновления простейшего таймера не происходит (в див загружаются данные единыжды и на этом всё встаёт), а в остальных браузерах скрипты успешно работают!

Скрипт в файле js для загрузки файла php:

setTimeout(function() {
updateInfo();
}, 1000);

function updateInfo()
{
$.ajax({
type: "GET",
url: "time_server.php",
success: function(data){$('#timeServer').html('Server Time: ' + data)}
});
};

Скрипт в файле php для получения текущего времени:

<?php
echo date("H:i:s");
?>


В чём может быть загвоздка? :help:

EvgLuch 04.12.2013 08:17

Ок. Эту проблему решил: указал вместо типа GET тип POST. Теперь понятно: IE не любит GET, а любит POST. :)

А как теперь основной код, где используется getjson перевести в POST? Кто-нибудь сталкивался с такой задачей?

Maxmaxmaximus3 04.12.2013 19:07

Цитата:

Сообщение от EvgLuch
Думаете, причина проблемы с IE в не корректно написанном коде?

я думаю да, из-за некорректно написанного кода ты наткнулся на какой-то баг который обычные браузеры худо бедно переварили, а ишак заступорился. так часто бывает.

EvgLuch 05.12.2013 01:55

Цитата:

Сообщение от Rise (Сообщение 284447)
так и должно быть setTimeout в твоем случае отработывает один раз через 1 секунду и всё
это не так...

Но ведь во всех браузерах, кроме IE, setTimeout работает как часы - не прерывно посекундно обновляется таймер? Почему в IE так не происходит, почему там один раз всего загрузка происходит?

EvgLuch 05.12.2013 01:57

Цитата:

Сообщение от Rise (Сообщение 284450)
function updateInfo() {
	$.ajax({
		type: "GET",
		url: "time_server.php",
		success: function(data) {
			$('#timeServer').html('Server Time: ' + data);
			setTimeout(updateInfo, 1000);
		}
	});
};
updateInfo();

Аналогично. Начинает нормально работатать, только если (и в моём и в твоём варианте) GET менять на POST.

EvgLuch 05.12.2013 07:55

Цитата:

Сообщение от Maxmaxmaximus3 (Сообщение 284561)
я думаю да, из-за некорректно написанного кода ты наткнулся на какой-то баг который обычные браузеры худо бедно переварили, а ишак заступорился. так часто бывает.

Может быть, но тогда почему всё так же не работает, если я упрощаю код до минимума, оставив лишь time.php (время сервера) и get_time.js (загрузка этого пхп и обновление его раз в секунду)? А начинает норм работать, только если меняю GET на POST.


Часовой пояс GMT +3, время: 06:29.