2012-01-23 2 views
0

Время от времени я нажимаю кнопку на своем веб-приложении, и я не получаю ответа. «Кнопка» инициирует вызов ajax. Я предполагаю, что есть тяжелый веб-трафик ... и это время или аналогичный. Есть ли максимальное время ожидания для ответов ajax с сервера? Есть ли способ зарегистрировать это поведение. Вот мой код ajax.Прерывистые ошибки ajax невозможно обнаружить?

var Ajax = { 
    createAjaxObject: function() 
    { 
     var request; 
     try 
     { 
      request = new XMLHttpRequest(); 
     } 
     catch(error) 
     { 
      try 
      { 
       request = new ActiveXObject("Msxml2.XMLHTTP"); 
      } 
      catch(error) 
      { 
       try 
       { 
        request = new ActiveXObject("Microsoft.XMLHTTP"); 
       } 
       catch(error) 
       { 
        request = false; 
       } 
      } 
     } 
     return request; 
    }, 

    useAjaxObject: function(path, param, ajax_func, html_div) 
    { 
     var object = new Ajax.createAjaxObject(); 
     object.open("POST", path, true); 
     object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     object.setRequestHeader("Content-length", param.length); 
     object.setRequestHeader("Connection", "close"); 
     object.onreadystatechange = function() 
     { 
      if(this.readyState === 4) 
      { 
       if(this.status === 200) 
       { 
        ajax_func(this.responseText, html_div); 
       } 
       else 
       { 
        Ajax.repeatUseAjaxObject(path, param, ajax_func, html_div); 
        return false; 
       } 
      } 
     }; 
     object.send(param); 
     return true; 
    }, 
    repeatUseAjaxObject: function(path, param, ajax_func, html_div) 
    { 
     var state = false, 
      count = 1; 
     while(state === false && count <= 5) 
     { 
      state = Ajax.useAjaxObject(path, param, ajax_func, html_div); 
      if(count !== 1) 
      { 
       alert('Ajax Object Use Failed '); 
      } 
     count++; 
     } 
    } 

ответ

2

Иногда ответ может быть неправильным ожидаемого типа, или сервер возвращает состояния ошибки кода/страницы, а не фактической запрашиваемой информации. Хороший способ проверить полный ответ (или, если есть на самом деле отсутствие ответа) является с хорошим HTTP трафика прокси-отладчик, такие как:

Скрипач http://fiddler2.com/fiddler2/ (бесплатно)

или Чарльз http://www.charlesproxy.com/

Они предоставят вам полную информацию о жизненном цикле каждого веб-запроса. Что касается минимального или максимального времени, обычно у сервера есть настройка для тайм-аута любого заданного запроса.

Время ожидания на сайте клиента: из jQuery Api ... Не уверен, так как вы катаетесь самостоятельно.

Установите тайм-аут (в миллисекундах) для запроса. Это переопределит любой глобальный тайм-аут с $ .ajaxSetup(). Период ожидания начинается с момента вызова $ .ajax; если выполняется несколько других запросов, и в браузере нет доступных подключений, возможно, что запрос будет тайм-аут до его отправки.

+0

, но клиент инициирует его ... это тот, кто ждет .... если сервер никогда не отвечает ... что он делает ... он должен тайм-аут в какой-то момент? –

1

Возможно, вы захотите проверить log4javascript, который «представляет собой фреймворк для ведения журнала JavaScript на основе структуры ведения журнала Java».

AjaxAppender может быть специально использован для отправки сообщений журнала.

Как указано в FlavorScape, на вашем сервере также должна быть настройка для таймаута запросов сервера.