mi pregunta principal es se estos dos toolkits (NuSOAP y AJAX) tienen algún problema para convivir ya que estoy intentando desarrollar un cliente para un webservice con ajax. El problema es que el servidor del webservice ya lo prove con un cliente php y funciona a la perfección, pero al intentar usarlo con un cliente programado con SAJAX(php) un método remoto me devuelve basura en lugar de la cadena esperada. Y aquí les presento algo del código:
Servidor
Código:
<?php require_once('lib/nusoap.php'); global $conexion1; global $conexion2; global $con1; global $con2; $con1=$con2=true; $servicio1 = new soap_server(); $servicio1->configureWSDL('modificawsdl', 'urn:modificawsdl'); // Register the method to expose $servicio1->register('consulta', // nombre del método array('cadSql' => 'xsd:string'), // parámetros de entrada array('return' => 'xsd:string'), // parámetros de salida 'urn:consultawsdl', // espacio de nombres 'urn:consultawsdl#consulta', // soapaction 'rpc', // style 'encoded', // use 'Realiza una lectura a la base de datos' // documentation ); $servicio1->register('modifica', //nombre del método array('cadSql' => 'xsd:string'), // parámetros de entrada array('return' => 'xsd:string'), // parámetros de salida 'urn:modificawsdl', // espacio de nombred 'urn:modificawsdl#modifica', // soapaction 'rpc', // style 'encoded', // use 'Realiza una modificación a la base de datos' // documentación ); function conecta(){ global $conexion1; global $conexion2; global $con1; global $con2; $conexion1 = mysql_connect('10.27.4.29:3306', 'root', 'mgalicia'); $host="10.27.4.9"; $puerto="54323"; $base="prueba"; $usr="mario"; $cve="mario"; $conexion2=pg_connect("host=$host port=$puerto user=$usr password=$cve dbname=$base"); //actualiza(); if(!$conexion1) $con1=false; else $con1=true; if(!$conexion2) $con2=false; else $con2=true; } function actualiza(){ global $conexion1; global $conexion2; global $con1; global $con2; $borra=false; if($con1&&$con2) return true; if(file_exists("res.rep")) if(!($cad=file_get_contents("res.rep"))) return false; else{ $arreglo=explode("@",$cad); if(!$con1&&($conexion1!=false)){ foreach ($arreglo as $query) mysql_query($query,$conexion1); $borra=true; } if(!$con2&&($conexion2!=false)){ foreach ($arreglo as $query) pg_query($conexion2,$query); $borra=true; } if($borra) unlink("res.rep"); return true; } else return true; } //Funciones remotas function consulta($cadSql){ global $conexion1; global $conexion2; global $con1; global $con2; conecta(); if($con1&&$con2){ $cad=""; $resultado=mysql_query($cadSql,$conexion1); for($c=0; $c<pg_num_rows($resultado); $c++){ $mbusqueda=mysql_fetch_assoc($resultado,$c); foreach ($mbusqueda as $valor) if($cad=="") $cad=$valor; else $cad=$cad.",".$valor; } mysql_close($conexion1); pg_close($conexion2); } else if($con1){ $cad=""; $resultado=mysql_query($cadSql,$conexion1); for($c=0; $c<pg_num_rows($resultado); $c++){ $mbusqueda=mysql_fetch_assoc($resultado,$c); foreach ($mbusqueda as $valor) if($cad=="") $cad=$valor; else $cad=$cad.",".$valor; } mysql_close($conexion1); } else if($con2){ $cad=""; $resultado=pg_query($conexion2,$cadSql); if($resultado==false) return false; for($c=0; $c<pg_num_rows($resultado); $c++){ $matres=pg_fetch_assoc($resultado,$c); foreach ($matres as $valor) if($cad=="") $cad=$valor; else $cad=$cad.",".$valor; pg_close($conexion2); } } else{ return false; } return $cad; } function modifica($cadSql){ global $conexion1; global $conexion2; global $con1; global $con2; conecta(); if($con1&&$con2){ pg_query($conexion2,$cadSql); pg_close($conexion2); mysql_query($cadSql,$conexion1); mysql_close($conexion); } else if($con1){ mysql_query($cadSql,$conexion1); mysql_close($conexion); $file=fopen("resp.rep","a"); fwrite($file,$cadSql."con2@"); fclose($file); } else if($con2){ pg_query($conexion2,$cadSql); pg_close($conexion2); $file=fopen("resp.rep","a"); fwrite($file,$cadSql)."con1@"; fclose($file); } else{ return false; } return true; } // Use the request to (try to) invoke the service $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; $servicio1->service($HTTP_RAW_POST_DATA); ?>
Función cliente
Código:
require("Sajax.php"); require_once('lib/nusoap.php'); global $cliente1; $cliente1 = new soapclient('http://10.27.4.9/~mgalicia/webservices/nusoap/pru4wsdl.xml', true); function busca($apellido_pat_autor,$nombre_autor){ global $cliente1; $nom=$apellido_pat_autor." ".$nombre_autor; $pru=verificaAutor($nom); $param=array('cadSql' => "SELECT * FROM autor INNER JOIN libro on (autor.id_autor=libro.id_autor) WHERE nombre_autor ='Kundera Milan';"); $result = $cliente1->call('consulta', $param); $rbusqueda=explode(",",$result); $cad=""; foreach($rbusqueda as $val) if($cad!="") $cad=$cad.",'".$val."'"; else $cad="'".$val."'"; //"'".pg_fetch_result($rbusqueda,0,"nombre_libro")."','".pg_fetch_result($rbusqueda,0,"ciudad_autor")."','".pg_fetch_result($rbusqueda,0,"id_autor")."','".pg_fetch_result($rbusqueda,0,"id_libro")."'"; return $result; }
función cliente javascript
Código:
function do_busca_cb(z) { arrBusca=eval("new Array(" + z +")"); actualizaCampos(); do_listaLibros(); } function do_busca() { var x, y; x = document.getElementById("apellido_pat_autor").value; y = document.getElementById("nombre_autor").value; x_busca(x, y, do_busca_cb); arrBusca=new Array(); }