Ajax pedidos novamente

votos
0

Tenho novamente um problema com meus pedidos de ajax. minha arquitetura não mudou, então eu uso um servlet Java no lado do servidor e no cliente Estou executando uma aplicação JavaScript, programado e testado com o Firefox. No firefox Eu também instalado o Firebug, porque é muito confortável para assistir as requisições Ajax entrada e saída. no entanto, o meu problema é o seguinte:

Às vezes, eu tenho que fazer mais requisições Ajax. Eu sempre verificar antes de enviar um novo, se o objeto XMLHttpRequest está pronto para enviar (por isso, se ele está em estado 0 ou 4) e só então eu fogo. Uma solicitação ajax normal, demora cerca de 200 a 300 ms. Mas, às vezes, vejo as respostas no Firebug depois de 10 ou 30 ms, que não continha quaisquer dados (mas o pedido chega ao servlet). Mas quando eu copiar a resposta, que eu quero para enviar para o cliente de mensagens instantâneas meu servlet, eu vejo a seqüência correta. Assim, parece que o servlet não enviá-lo para o cliente. Eu tentei um flush () no servlet mas nada mudou. Eu também já implementou o conselho do meu post anterior ( Problema com respostas AJAX), Que eu não deveria fazer o objeto PrintWriter, você começa com res.getWriter () (HttpServletResponse res) global (agora ele é local no meu método doPost).

Alguém tem uma idéia do que está acontecendo de errado?

Publicado 27/08/2009 em 07:54
fonte usuário
Em outras línguas...                            


3 respostas

votos
0

Tente desativar cache do navegador para determinar se essas chamadas são curtos porque FF utilizado um pedido anteriormente em cache.

Você também pode querer usar algo como depurador web Fiddler para garantir que o lado do servidor está retornando os dados corretos, pois mostra-lhe o tráfego http antes de o navegador a processou

Respondeu 27/08/2009 em 16:35
fonte usuário

votos
0

Aqui está o código que eu uso no JavaScript para disparar um novo pedido:

// the XMLHttpRequest object I created in the constructor is called this.httpReqObj
// this.queryAddr is the servlet that handels the responses
if(this.httpReqObj == null || this.queryAddr == null)
{
  return(false);
}

// check if XMLHttpRequest object is ready to send a new request.   
if(this.getReadyState() != 0 && this.getReadyState() != 4)
{       
  return(false);
}

// the message queue contains strings, that should be sent to the server
if(this.msgQueue.hasNext())
{
  var bundleMsg = "";
  var bundleCtr = 0;

  while(this.msgQueue.hasNext() && bundleCtr < DataRequester.BUNDLE_FACTOR)
  {
    bundleCtr ++;
    bundleMsg += this.msgQueue.consume() + "&";
  }

  // remove last character of string
  bundleMsg = bundleMsg.substring(0, bundleMsg.length - 1);

  // "POST": choose the transport mechanism to the server
  // "this.queryAddr": URL to which the query should be sent
  // "true": communication should be asynchron 

  // if argument not available, assume method is true           
  if(typeof method == 'undefined')
  {
    method = true;
  }

  this.httpReqObj.open("POST", this.queryAddr, method);

  // this function is called every time the status
  // of the http request has changed. There exist five states.
  // 0: not initialized
  // 1: currently loading
  // 2: finished loading
  // 3: waiting for return
  // 4: finished
  if(method)
  {
    this.httpReqObj.onreadystatechange = createObjectCallback(obj, func);
  }

  // create header for POST query
  this.httpReqObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  this.httpReqObj.setRequestHeader("Content-length", bundleMsg.length);         

  // send data to server
  this.httpReqObj.send(bundleMsg);

  // synchronous request
  if(method == false)
  {
    return(this.getResponseXML());
  }

}else
{
  return;
}
Respondeu 27/08/2009 em 08:26
fonte usuário

votos
0

Qual é o status http (200, 304, etc) sobre as respostas que voltar muito rapidamente?

Respondeu 27/08/2009 em 07:59
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more