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からテキストノードを抽出することしかできません。確かにもっと簡単な方法があります。