1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

problema AJAX

Discussão em 'Web Development' iniciada por fil79, 16 de Dezembro de 2008. (Respostas: 9; Visualizações: 1641)

  1. fil79

    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!!
     
  2. geoblast

    geoblast Power Member

    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)
     
  3. fil79

    fil79 Power Member

    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;
    }
     
    
     
  4. geoblast

    geoblast Power Member

    Sorry.... como só vi a função a ser invocada achei por bem postar o método....
     
  5. geoblast

    geoblast Power Member

    Parece-me tudo em ordem. Experimenta associar a resposta ao xmlHttp.onreadystatechange.
     
  6. fil79

    fil79 Power Member

    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"
     
  7. geoblast

    geoblast Power Member

    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.
     
  8. fil79

    fil79 Power Member

    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 ;)
     
  9. geoblast

    geoblast Power Member

    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??
     
  10. fil79

    fil79 Power Member


    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
     

Partilhar esta Página