problema AJAX

fil79

Power Member
Boas
tenho um script(AJAX) que funciona perfeitamente no IE7 mas não no firefox.
Consiste em preencher uma textarea de acordo com o valor escolhido por uma dropdown.
No HTML invoco a função preencheTexto e passo dois argumentos(valor da dropdonw e indice da textarea (com o ID relatorio) a ser preenchida):
Código:
//HTML:
<select name='frases' onChange='preencheTexto(this.value,".$i.")'/> 

//AJAX
var xmlHttp;
function preencheTexto(valor,indice)
{
if (valor.length==0)
  { 
  document.getElementById("relatorio"+indice).innerHTML="";
  return;
  }
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
  {
  alert ("O seu Browser não permite AJAX");
  return;
  } 
//PÁGINA QUE VAI FAZER UMA QUERY DE ACORDO COM O VALOR SELECCIONADO NA DROPDOWN (q)  
var url="gethint.php";
url=url+"?q="+valor;
xmlHttp.onreadystatechange;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
//DEPOIS VAI PREENCHER A TEXTAREA DE ACORDO COM O VALOR DEVOLVIDO PELO SCRIPT GETHINT.PHP
 
 document.getElementById("relatorio"+indice).innerHTML=xmlHttp.responseText;
 
}
O erro dado pela consola de erros do firefox é o seguinte:
Erro: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIChannel.contentType]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"
location: "JS frame :: file:///C:/Program Files/Mozilla Firefox/components/FeedProcessor.js :: FP_onStartRequest :: line 1440" data: no]
Arquivo-fonte: file:///C:/Program Files/Mozilla Firefox/components/FeedProcessor.js
Linha: 1440

Agradeço qualquer ajuda!!
 
Boas
tenho um script(AJAX) que funciona perfeitamente no IE7 mas não no firefox.
Consiste em preencher uma textarea de acordo com o valor escolhido por uma dropdown.
No HTML invoco a função preencheTexto e passo dois argumentos(valor da dropdonw e indice da textarea (com o ID relatorio) a ser preenchida):
Código:
//HTML:
<select name='frases' onChange='preencheTexto(this.value,".$i.")'/> 

//AJAX
var xmlHttp;
function preencheTexto(valor,indice)
{
if (valor.length==0)
  { 
  document.getElementById("relatorio"+indice).innerHTML="";
  return;
  }
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
  {
  alert ("O seu Browser não permite AJAX");
  return;
  } 
//PÁGINA QUE VAI FAZER UMA QUERY DE ACORDO COM O VALOR SELECCIONADO NA DROPDOWN (q)  
var url="gethint.php";
url=url+"?q="+valor;
xmlHttp.onreadystatechange;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
//DEPOIS VAI PREENCHER A TEXTAREA DE ACORDO COM O VALOR DEVOLVIDO PELO SCRIPT GETHINT.PHP
 
 document.getElementById("relatorio"+indice).innerHTML=xmlHttp.responseText;
 
}
O erro dado pela consola de erros do firefox é o seguinte:
Erro: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIChannel.contentType]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"
location: "JS frame :: file:///C:/Program Files/Mozilla Firefox/components/FeedProcessor.js :: FP_onStartRequest :: line 1440" data: no]
Arquivo-fonte: file:///C:/Program Files/Mozilla Firefox/components/FeedProcessor.js
Linha: 1440

Agradeço qualquer ajuda!!

Parece-me ser do objecto de ajax que está a construir. Experimenta desta forma. Em caso de ajax, executas o teu código.

PHP:
try {
         ajax = new ActiveXObject("Microsoft.XMLHTTP");
      } 
      catch(e) {
         try {
            ajax = new ActiveXObject("Msxml2.XMLHTTP");
         }
         catch(ex) {
            try {
               ajax = new XMLHttpRequest();
            }
            catch(exc) {
               alert("Esse browser não tem recursos para uso do Ajax");
               ajax = null;
            }
         }
      }
      //se tiver suporte ajax
      if(ajax)
 
mas eu já tenho uma função no código que verifica o suporte a AJAX:


Código:
function GetXmlHttpObject()
{
var xmlHttp=null;
try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 // Internet Explorer
 try
  {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
return xmlHttp;
}
 
mas eu já tenho uma função no código que verifica o suporte a AJAX:


Código:
function GetXmlHttpObject()
{
var xmlHttp=null;
try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 // Internet Explorer
 try
  {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
return xmlHttp;
}

Sorry.... como só vi a função a ser invocada achei por bem postar o método....
 
mas eu já tenho uma função no código que verifica o suporte a AJAX:


Código:
function GetXmlHttpObject()
{
var xmlHttp=null;
try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 // Internet Explorer
 try
  {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
return xmlHttp;
}

Parece-me tudo em ordem. Experimenta associar a resposta ao xmlHttp.onreadystatechange.
 
se eu colocar assim:
Código:
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  {
  document.getElementById("txtHint"+indice).innerHTML=xmlHttp.responseText;
  }
}

ao invés do simples:
Código:
document.getElementById("txtHint"+indice).innerHTML=xmlHttp.responseText;

funciona bem no firefox e deixa de funcionar no internet explorer

erro: "OS DADOS NECESSÁRIOS PARA CONCLUIR ESTA OPERAÇÂO AINDA NÃO ESTÃO DISPONIVEIS"
 
se eu colocar assim:
Código:
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  {
  document.getElementById("txtHint"+indice).innerHTML=xmlHttp.responseText;
  }
}
ao invés do simples:
Código:
document.getElementById("txtHint"+indice).innerHTML=xmlHttp.responseText;
funciona bem no firefox e deixa de funcionar no internet explorer

erro: "OS DADOS NECESSÁRIOS PARA CONCLUIR ESTA OPERAÇÂO AINDA NÃO ESTÃO DISPONIVEIS"

Estás a testar localmente ou no servidor?? Já me aconteceu, quando usava este método, de as coisas não funcionarem no meu servidor local e funcionarem bem no alojamento.

Tanto que passei a usar quase exclusivamente o ajax do prototype ou do jquery...

Sinceramente não descortino motivo para não funcionar.
 
aparentemente está resolvido:


Código:
function preencheTexto(valor,indice)
{
if (valor.length==0)
  { 
  document.getElementById("relatorio"+indice).innerHTML="";
  return;
  }
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
  {
  alert ("O seu Browser não permite AJAX");
  return;
  } 
 
var url="gethint.php";
url=url+"?q="+valor;
//url=url+"&id="+indice;
//xmlHttp.onreadystatechange;
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  {
  document.getElementById("relatorio"+indice).innerHTML=xmlHttp.responseText;
  }
}
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}


assim está a funcionar perfeitamente!Muito obrigado ;)
 
aparentemente está resolvido:


Código:
function preencheTexto(valor,indice)
{
if (valor.length==0)
  { 
  document.getElementById("relatorio"+indice).innerHTML="";
  return;
  }
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
  {
  alert ("O seu Browser não permite AJAX");
  return;
  } 
 
var url="gethint.php";
url=url+"?q="+valor;
//url=url+"&id="+indice;
//xmlHttp.onreadystatechange;
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  {
  document.getElementById("relatorio"+indice).innerHTML=xmlHttp.responseText;
  }
}
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
assim está a funcionar perfeitamente!Muito obrigado ;)

Para além da função no «onreadystatechange» mudaste o id da textarea de «texthint» para relatorio». A qual dos dois se devia o estouro??
 
Para além da função no «onreadystatechange» mudaste o id da textarea de «texthint» para relatorio». A qual dos dois se devia o estouro??


o id original é texthint, só mudei para relatório aqui no fórum para ficar mais legível, e esqueci-me à pouco de mudar...não rebentou por causa disso..foi devido à função e também ao facto de ter alterado as permissões do ficheiro gethint.php

obrigado
 
Back
Topo