0

Ajax呼び出しを行う関数を設定しようとしていますが、onclickイベントを設定すると何が起こっているのか理解できないことを告白する必要があります。データベースからフィールドを取得してユーザーに表示するためにAjax呼び出しを行おうとしています。ユーザーが入力フィールドに名前を入力すると、クリックしたリンクに応じて、作成しようとしている関数がデータベースへのクエリの結果を表示するという考え方です。PHPでAjax関数が呼び出すスクリプトのswitchステートメントを使用してクエリを処理しますが、Javascriptコードでこの動作を処理する変数を設定できません。

私はこのようなJavascriptコードを持っています:

var ajaxRequest = ajaxFunction();
function ajaxFunction(){
var ajaxRequest;  // The variable that makes Ajax possible!

try{
    // Opera 8.0+, Firefox, Safari
    ajaxRequest = new XMLHttpRequest();
} catch (e){
    // Internet Explorer Browsers
    try{
        ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try{
            ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e){
            // Something went wrong
            alert("Your browser broke!");
            return false;
        }
    }
} return ajaxRequest;
} 

function process() {
id="default";
profesional = document.getElementById('profesional');
dotal = document.getElementById('dot'); 
proyecta = document.getElementById('proy');
proyecta_A = document.getElementById('proy_af');
gastosM = document.getElementById('gastos_med');
autos = document.getElementById('aut');
polifam = document.getElementById('polif');

profesional.onclick=function() {
id="prof";
return id;  
}
dotal.onclick=function() {
id="dotal";
return id;  
}
proyecta.onclick=function() {
id="proyecta";  
return id;
}
proyecta_A.onclick=function() {
id="proyAf";
return id;  
}
gastosM.onclick=function() {
id="gastos_medicos";
return id;  
}
autos.onclick=function() {
id="autos"; 
return id;
}
polifam.onclick=function() {
id="polifam";
return id;  
}   
if(ajaxRequest.readyState==4 || ajaxRequest.readyState==0) {apellido =     encodeURIComponent(document.getElementById('query').value)
if (apellido != undefined) {
ajaxRequest.open("GET", 'adminsrc.php?buscarregistro=' +apellido +'&id='+id, true)
ajaxRequest.send("");   
ajaxRequest.onreadystatechange=handleServerResponse;
}
}
else setTimeout('process()',1000);
}

function handleServerResponse(){
{
if (ajaxRequest.readyState==4) {

if(ajaxRequest.status==200) {   
respuesta=ajaxRequest.responseXML;
respuestadoc = respuesta.documentElement;
if (apellido != undefined) {
ident = respuesta.getElementsByTagName('identidad')[0];
result = ident.firstChild;
refrescar = respuesta.getElementsByTagName('identidad')[1];
actualizar = refrescar.firstChild;
if(result!=undefined) {
resultado = result.data;
document.getElementById('profesreg').setAttribute('value', resultado);
document.getElementById('dotalreg').setAttribute('value', resultado);
document.getElementById('gmmreg').setAttribute('value', resultado);
document.getElementById('proyectareg').setAttribute('value', resultado);
document.getElementById('proyecta2reg').setAttribute('value', resultado);
document.getElementById('autosreg').setAttribute('value', resultado);
document.getElementById('polifreg').setAttribute('value', resultado);
}
if(actualizar!=undefined) {
actualiza = actualizar.data;
document.getElementById('actual_1').setAttribute('value', actualiza);
document.getElementById('actual_2').setAttribute('value', actualiza);
document.getElementById('actual_3').setAttribute('value', actualiza);
document.getElementById('actual_4').setAttribute('value', actualiza);
document.getElementById('actual_5').setAttribute('value', actualiza);
document.getElementById('actual_6').setAttribute('value', actualiza);
document.getElementById('actual_7').setAttribute('value', actualiza);
}
msje = respuestadoc.firstChild.childNodes[0]; 
if (msje !=undefined) {
mess = msje.data;
document.getElementById("res").innerHTML = "<h4>"+ mess +"</h4>";
} 
     }
    setTimeout('process()',1000);
    }
    else alert ('hubo un problema al conectarse con el servidor: ' +    ajaxRequest.statusText);
}
}
} 

//-->

最後の部分は、PHPがそれらの値を認識するように、フォームの非表示フィールドの値を設定することです(データベース内の一部のフィールドを更新するように設定されています)。しかし、私はjavascriptにかなり固執していると言わなければなりません(私はそれが得意ではありませんでした)。何か提案をお願いします。

@Mate xmlファイルは次のように作成されます:

<identificacion>
<response>
Se encontró al asegurado con nombre Mara Fernanda Bravo Palomino, número de póliza        27608165, la cual vence el 2003-04-05 y cuyos beneficiarios contratados son Ana Camila Lpez       Bravo
</response>
<identidad>Bravo Palomino</identidad>
<identidad>si</identidad>
</identificacion>

そして一度(数週間前)私はすでにそれを次のような関数で動作させていました:

 function process() {
    if(ajaxRequest.readyState==4 || ajaxRequest.readyState==0) {apellido =        encodeURIComponent(document.getElementById('query').value)
    if (apellido != undefined) {
    ajaxRequest.open("GET", 'adminsrc.php?buscarregistro=' +apellido, true)
    ajaxRequest.send("");   
    ajaxRequest.onreadystatechange=handleServerResponse;
    }
    }
    else setTimeout('process()',1000);
    }

上記の関数handleServerResponse; しかし、ご覧のとおり、複雑な反復でxmlからテキストノードを抽出することしかできません。確かにもっと簡単な方法があります。

4

1 に答える 1

1

1) jQuery ライブラリをダウンロードし、正しいパスにリンクします。

2) 私は html と xml の応答に少し盲目ですが、うまく解決できると思います。

        <script src="jquery-1.8.2.min.js" type="text/javascript"></script>
        <script type="text/javascript">

            function AjaxCall(id) {

                //Obtengo el appelido.
                var apellido = $('#query').val();

                //Armo la url con el querystring
                var urlPhp = 'adminsrc.php?buscarregistro=' + apellido + '&id=' + id;

                $.ajax({
                    type: "GET",
                    url: urlPhp,
                    contentType: "charset=utf-8",
                    dataType: "xml",
                    success: function (xml) {
                        successProcess(xml);
                    },
                    error: function (msg) {
                        alert("error");
                    }
                });
            }

            //Proceso el xml si estuvo Ok.
            function successProcess(xml) {
                //Revisar bien el XML devuelto

                var identidades = $(xml).find("identidad");

                result = identidades[0];
                refresh = identidades[1];
                message = $(xml).find('mensaje');

                SetResult(result);
                SetActualizar(refresh);
                SetMsj(message);

            }

            //Seteo el resultado en los valores de los controles.
            function SetResult(resultado) {

                if (result != undefined) {
                    $('#profesreg').val(resultado);
                    $('#dotalreg').val(resultado);
                    $('#gmmreg').val(resultado);
                    $('#proyectareg').val(resultado);
                    $('#proyecta2reg').val(resultado);
                    $('#autosreg').val(resultado);
                    $('#polifreg').val(resultado);
                }
            }

            //Seteo los dato actualizados
            function SetActualizar(actualiza) {
                if (actualiza != undefined) {
                    $('#actual_1').val(actualiza);
                    $('#actual_2').val(actualiza);
                    $('#actual_3').val(actualiza);
                    $('#actual_4').val(actualiza);
                    $('#actual_5').val(actualiza);
                    $('#actual_6').val(actualiza);
                    $('#actual_7').val(actualiza);
                }
            }

            //Muestro el mensaje
            function SetMsj(msje) {

                if (msje != undefined) {
                    $('#res').html("<h4>" + msje + "</h4>");
                }
            }


            //Este evento se dispara cuando carga el documento.
            $(document).ready(function () {

                $('#profesional').click(function () { AjaxCall('prof') });
                $('#dot').click(function () { AjaxCall('dotal') });
                $('#proy').click(function () { AjaxCall('proyecta') });
                $('#proy_af').click(function () { AjaxCall('proyAf') });
                $('#gastos_med').click(function () { AjaxCall('gastos_medicos') });
                $('#aut').click(function () { AjaxCall('autos') });
                $('#polif').click(function () { AjaxCall('polifam') });

            });


        </script>
    </head>
于 2012-10-09T04:06:11.783 に答える