Tema: NuSOAP-AJAX
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/03/2006, 10:22
vvblond
 
Fecha de Ingreso: diciembre-2005
Ubicación: Ciudad de México
Mensajes: 45
Antigüedad: 18 años, 5 meses
Puntos: 1
NuSOAP-AJAX

Hola a todos,

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();
    }