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

Ajax, o problema

Discussão em 'Web Development' iniciada por davidericardo, 27 de Julho de 2008. (Respostas: 13; Visualizações: 999)

  1. Viva,
    é a primeira vez que escrevo neste fórum, apesar de já o conhecer e já ter lido algumas coisas daqui.

    Enfim, o que me traz aqui é que estou a fazer um projecto em que trabalho com ajax, e um grande problema é a compatibilidade entre browser's.
    Por exemplo, vou colocar aqui um pequeno código que me permite (no IE) seleccionar um determinado distrito e obter os concelhos correspondentes.
    Por isso pedia-vos que dessem uma vista de ohos e me pudessem ajudar


    PHP:
    <script language="javascript" type="text/javascript">
    // FUNÇÃO AJAX PARA IR BUSCAR CONCELHO DE UM DETERMINADO DISTRITO
     
    function xmlhttpPost(strURLstrSubmitstrResultFunc) {
     
           var 
    xmlHttpReq false;
     
           
    // Mozilla/Safari
           
    if (window.XMLHttpRequest) {
                   
    xmlHttpReq = new XMLHttpRequest();
                   if(
    xmlHttpReq.overrideMimeType) {
                       
    xmlHttpReq.overrideMimeType('text/html');
                   }
           }
           
    // IE
           
    else if (window.ActiveXObject) {
                   
    xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
           }
     
        
    xmlHttpReq.open('POST'strURLtrue);
        
    xmlHttpReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        
    xmlHttpReq.onreadystatechange = function() {
                if (
    xmlHttpReq.readyState == 4) {
                        eval(
    strResultFunc '(xmlHttpReq.responseText);');
                }
        }
     
        
    xmlHttpReq.send(strSubmit);
    }
     
    function 
    concelhosPesq_result(value)
    {
        
    document.getElementById('concelho_pesq').innerHTML value;
    }
     
    function 
    concelhosPesq() 
    {
     
        
    document.getElementById('concelho_pesq').innerHTML "Aguarde, a carregar ...";
        var 
    origem document.getElementById("idDistrito").options[document.getElementById("idDistrito").selectedIndex].value;
     
        var 
    data_string "idDistrito=" origem;
        
    xmlhttpPost('concelhos.php'data_string'concelhosPesq_result');
    }         
    </
    script>
     
    <
    span id="concelho_pesq"></span>
     
  2. Goncalo Silva

    Goncalo Silva Power Member

    Qual é a dúvida em especifico?
     
  3. a dúvida é que nao executa isso no FF...
    eu clico no distrito e ele nos concelhos simplesmente diz: Aguarde, a carregar...

    tou mesmo agora a tentar implementar outras soluções que vi noutros foruns e nada..
    da sempre o mesmo erro..

    :S
     
  4. hostmake

    hostmake Power Member

    1- tu copiaste isso de algum e fizeste rename, ajudava ver a base.

    2- é normal não fazer nada, nesse código apenas crias as funções, onde está o call da função?

    etc etc..
     
  5. JAFoNEXUS

    JAFoNEXUS Power Member

  6. o resto do códido..

    PHP:
    <select name="idDistrito" onchange="javascript:concelhosPesq();">
    <option value=""></option>
    <?
    $distrito = mysql_query("SELECT * FROM distrito ORDER BY distrito");
    while ($linhaD = mysql_fetch_array($distrito)) {?>
    <option value="<? echo $linhaD['idDistrito']; ?>"><? echo $linhaD['distrito']; ?></option>
    <? } ?>
    </select>
     
    <span id="concelho_pesq"></span>
    concelhos.php
    PHP:
    //liga ao MySql
    require_once("Connections/conn.php"); 
    //RECEBE PARÂMETRO 
    $idDistrito = $_POST["idDistrito"]; 
    if (!empty($idDistrito)) {
    //QUERY 
    $sql = " 
      SELECT a.idConcelho, a.concelho 
      FROM concelho a 
      WHERE a.idDistrito = ".$idDistrito." 
      ORDER BY a.concelho"; 
      
    //EXECUTA A QUERY 
    $sql = mysql_query($sql); 
    $num = mysql_num_rows($sql); 
    ?> 

    <select name="idConcelho" id="idConcelho"><option value=""></option>
    <?php      
     $i
    =0;
     while (
    $i mysql_fetch_array($sql)) { ?>
     <option value="<?php echo mysql_result($sql,$i,"idConcelho");?>"><?php echo mysql_result($sql,$i,"concelho");?></option>
    <?php $i++; } 
    echo 
    "</select>";
    }
     
  7. p3dro

    p3dro Power Member

    Na definição do select falta-te o atributo id

    Código:
    <select name="idDistrito" onchange="javascript:concelhosPesq();">
    deveria ser

    Código:
    <select id="idDistrito" name="idDistrito" onchange="javascript:concelhosPesq();">
     
  8. _lamy_

    _lamy_ Power Member

  9. Goncalo Silva

    Goncalo Silva Power Member

    Sim, é a melhor solução, de longe. Aconselho-te a jquery... Já usei a jquery e a mootools (ambas excelentes) e para o que pretendes parece-me que a jquery é a que te oferece o melhor suporte.
     
  10. hostmake

    hostmake Power Member

    Ele pediu ajuda para resolver os problemas, está tudo a tentar fugir a dose.

    Ora bem, acreditando que esse SACK está a funcionar bem, ficam aqui umas dicas para chegares lá:

    1- No IE o innerHTML não funciona dentro de tabelas.
    2- Estás a testar com que browser?
    3- Se firefox, instala o FireBug e ve se o AJAX está a ser corrido sequer, e qual é o return do AJAX (dá para ver isso tudo com o FireBug)
     
  11. p3dro

    p3dro Power Member

    Já tinha tentado dar uma solução :p não sei é se resolve o problema dele, há que esperar que ele diga alguma coisa, mas obviamente que não invalida o que escreveste no teu post :)
     
  12. viva, pessoal..
    desculpem nao ter respondido, desde já o meu muito obrigado pela preocupação.
    Andei atarefado hoje, e só agora vi os vossos posts.
    amanha eu ja vou ver aquilo que me dizem, se bem que ja fiz aquilo do firebug e deu-me erro, salvo erro, no document.getElementById("idDistrito").
    Relativamente a uma pergunta colocada aqui: sim tou utilizar somente tabelas para a construção da aplicação. e no IE funciona perfeitamente, enquanto no FF, quando selecciono o distrito, na parte do concelho só aparece "Aguarde, a Carregar...", e nao sai dali.
    Mas amanhã ja vejo melhor e depois post aqui o resultado.

     
    Última edição: 29 de Julho de 2008
  13. pessoal, obrigadão.

    já consegui.. nem acredito que demorei N dias, para nao dizer semanas para resolver este problema..

    era mesmo so colocar no Select o id="idDistrito".. que coisa absurda..mas pronto..
    tks

    de ***** modo vou colocar amanha outro post, mas sobre a verificação de qual o registo que se encontra checked, utilizando checkbox..

    tks mais uma vez..
     
  14. Goncalo Silva

    Goncalo Silva Power Member

    :iconlock:
     

Partilhar esta Página