Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   AJAX запрос в Internet Explorer срабатывает через раз (https://javascript.ru/forum/jquery/33152-ajax-zapros-v-internet-explorer-srabatyvaet-cherez-raz.html)

nikolayseo 12.11.2012 11:41

AJAX запрос в Internet Explorer срабатывает через раз
 
Здравствуйте,

JS.js

$('#object').live('change', function (){
	
var realty = $('#realty').val();
var object = $('#object option:selected').text();


$.ajax({

  async: false,	
  url:"/ajax/ajax.php",
  type: "POST",
  data: ({object:object}),  
  success: function(data) {
  if (data == '') {$('#information_object').html();} else {$('#information_object').html(data);}
  
  }
});
});



ajax.php

<?php
header("Content-type: text/html; charset=utf-8");
include_once("../database.php");

if (!empty($_POST['realty'])) {
$result = mysql_query ("SELECT id, value FROM object WHERE id_realty = ".mysql_real_escape_string($_POST['realty'])."");
while ($myrow = mysql_fetch_assoc($result))
{echo "<option id='".$myrow['id']."' value='".$myrow['id']."'>".$myrow['value']."</option>\n";}
}
?>



В Jquery полный профан. Но тем не менее в ФФ, ХРОМ, ОПЕРА все летает и работает так как мне нужно.

Но дело обстоит иначе с IE (8,9) запрос срабатывает, НО, через раз. При событии change по селекту браузер блокируется секунд на 5 ... но запрос не возвращает никаких данных.... со второго или третьего раза запрос срабатывает, но на 4 , 5 опять не срабатывает. Толи сервер не успевает обработать запрос, то ли браузер...


прошу помочь. Заранее спасибо.

DjDiablo 12.11.2012 12:04

1) в порядке эксперимента включите асинхронные запросы
для этого заремарте async: false, или замените на async: true
посмотрим что изменится.

2)вы уверены что change срабатывает каждый раз ?
если нет, то вставьте alert('hello'); в функцию и посмотрите всегда ли он появляется.

о результатах отпишитесь.

nikolayseo 12.11.2012 12:58

Цитата:

Сообщение от DjDiablo (Сообщение 215574)
1) в порядке эксперимента включите асинхронные запросы
для этого заремарте async: false, или замените на async: true
посмотрим что изменится.

2)вы уверены что change срабатывает каждый раз ?
если нет, то вставьте alert('hello'); в функцию и посмотрите всегда ли он появляется.

о результатах отпишитесь.


Включил/выключил async, нет результата.

Сообщение alert отрабатывает каждый раз проверил 100 раз, отработал 100 из 100

Hoshinokoe 12.11.2012 22:40

nikolayseo,

1) Сначала уберите async: false - из-за этого браузер подвисает на несколько секунд.
2) Что у вас возвращает сервер ? (какие данные)
вставьте alert(data) в success функцию.
3) добавьте колбэк для ошибки:
error: function (jqXHR, textStatus, errorThrown) { alert(textStatus + errorThrown);}

nikolayseo 12.11.2012 23:42

Цитата:

Сообщение от Hoshinokoe (Сообщение 215678)
nikolayseo,

1) Сначала уберите async: false - из-за этого браузер подвисает на несколько секунд.
2) Что у вас возвращает сервер ? (какие данные)
вставьте alert(data) в success функцию.
3) добавьте колбэк для ошибки:
error: function (jqXHR, textStatus, errorThrown) { alert(textStatus + errorThrown);}

1. Убрал async: false - подвисания исчезли, проблема осталась.

2. Сервер должен возвращать html код вида:

<option id="1" value="1">...</option>
<option id="2" value="2">...</option>
<option id="3" value="3">...</option>


alert(data) срабатывает в IE раз 5 из 10, в остальных случаях

срабатывает калбек функция error c ошибками вида: 12152 error или ErrorInternal Server Error.

У хостера порядок вроде сказал. В логах сервера ошибки вида: (70007)The timeout specified has expired: mod_fcgid: can't get data from http client, referer:

Hoshinokoe 13.11.2012 00:13

nikolayseo,

У вас серверная ошибка. Копать нужно в эту сторону. Логируйте на сервере данные перед отправкой и смотрите что вы получаете на клиенте.

Полностью выводите ошибку, это может помочь:
error: function (jqXHR, textStatus, errorThrown) { 
   alert(jqXHR.toString() + ' ' + textStatus +  ' ' + errorThrown);
}


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