Conectase A Web Service

Saludos,

Antes que nada, soy un nuevo programador con 2 o 3 meses de experiencia pero me han mandado a hacer muchas cosas y el problema es que he trabjaado en plataformas diferentes.

Despues de la introducción les explicó mi duda ademas de decir que me gusta esto del Yii Framework.

He hecho esto anteriormente en javascript y phonegap pero no la razón por la cual no me esta funcionando aqui.

Estoy intentando conectarme a un Web Service en .NET que me devuelve resultados en JSON utilizando el metodo AJAX




<script type="text/javascript">

jQuery(function($) {

   	 $.ajax({

      	 type: 'get',

         url: "webservice.aspx",

         dataType: 'json',

         success: function(data) {

           //codigo

         });

         }

	}); 

</script>



Mi primera llamada es para activar la sesión y una vez activada debería permitirme ver los datos de la segunda llamada. Si pongo los enlaces en Orden en el navegador (primero el de la sesión y luego el de los datos) puedo ver mi resultado en JSON, pero al añadir el código en un VIEW de Yii Framework (cuando funcione creo un archivo js en assets), aunque la primera llamada me indica que la sesión fue activada, la segunda no me devuelve datos, en otras palabras no se mantiene la sesión que se crea en el web service.

Pregunto si hay alguna manera de llamar los métodos AJAX usando y poder leer los resultados usando funciones en un Controlador, para así no tener que usar javascript a menos que sea necesario. Leí sobre CHtml::ajaxLink y CHtml::ajax($options) pero necesito por lo menos utilizando ajaxLink no me funciona ya que necesito que los datos carguen al subir la página.

Gracias por su ayuda

– EDIT –

Mi ambiente de trabajo es mi computador local, no he exportado la aplicación al servidor aún)

Hola,

 Podría darte unos consejos, recuerda que los datos siempre tienen que pertenecer a un modelo o una clase, desde el controlador los puedes llamar así si necesitas hacer la llamada a este web service no estarías reescribiendo código podrías crear un clase en la carpeta models llamada WebServices y colocar esta función



    static function getDataArrayJson()

    {

        $url = "webservice.aspx";

        return CJSON::decode(file_get_contents($url));

    }




Y desde tu controlador llamar a tu clase webservices:




    $data=WebServices::getDataArrayJson();



Saludos espero te ayude.

Wow… ¿Así de sencillo? Lo intentaré y te dejaré saber.

Por casualidad no sabes nada sobre la sesión porque sinceramente me esta muy raro ya que la sesión se mantiene mientras invoco el enlace desde el navegador pero no cuando la invoco desde una función ajax en javascript desde Yii Framework, aunque probablemente con ese codigo funcione.

Gracias por todo :smiley:

Hola,

Logre imprimir los datos utilizando el siguiente código


foreach ($data as $key => $value) {

			echo $key . $value;

			# code...

		}

muchas gracias por tu ayuda, si hay mejores maneras de hacerlo pues lo agradeceria mucho. En realiadad quiero aprender más de Yii

– Edit –

En realidad no funciona porque no se como enviar al view lo siguiente


$data=WebServices::getDataArrayJson();

Hola,

Me alegra que hayas avanzado, si lograste imprimir la variable $data solo la tienes que enviar a la vista con el metodo render en la misma acción de tu controlador:




               $this->render('vista',array('data'=>$data));



Luego en la vista la manipulas dentro de las etiquetas de php




            <?php


              foreach ($data as $key => $value) {

			echo $key . $value;

			# code...

		}

            ?>




Saludos.

Muchas gracias Andre, he logrado mi cometido y ademas de pasar los últimos dos dias leyendo Yii debo hacer mi propio web service ya que como mencioné en mi primer post el web service no esta manteniendo la sessión que necesito para poder extraer datos.

Adicional a eso andaba desganado pero con tu ayuda y mi propio yii web service podre corregir la situación

Debo dejarte saber que todo me ha funcionado y despues de 1 semana atascado en Yii, he progresado mucho. ahora a ver si en 3 dias hago una semana de trabajo… son solo 7 pantallas

Hola nuevamente,

Tengo una interrogante y no logro conseguir respuesta y mis intentos han fallado,

  1. Tengo una forma con un dropDownList que se llena con una llamada JSON. Este JSON lo generé con un web service creado en YII pero el mismo me devuelve la fila de la base de datos de la siguiente manera

EX:: -> {"0":{"dato":"valor"},"1":{"dato":"valor"}}

Esto hace que mi dropDownList active la propiedad del select optgroup haciendo que en las opciones de mi dropdown list aparescan de la siguiente manera

0

Valor

1

Valor

2

Valor

Intente desabilitar del optgroup utilizando un array(‘optgroup’, array(“label”->“disabled”) pero no me funcionó y no logre eliminar el número de la fila del web service. ¿Cual es la forma correcta de por lo menos eliminar el optgroup del dropDownList?

Gracias por la ayuda

Saludos:

La mejor manera de suplir datos a un dropDownList es usando CHtml::listData. El listData a su vez se puede alimentar usando JSON.

(BTW, si eres de Puerto Rico envíame un PM, quizá podamos colaborar en el futuro) :)

Suerte,

Funciono de maravilla





<?php echo $form->dropDownList($model,'variable del modelo', 

CHtml::listData(Modelo::model()->función en modelo que devuelve JSON,'id','valor'));




funcinó de la primera. Gracias y btw the envié un PM

Hola nuevamente,

Estoy intentando enviar un email luego de que hago un CREATE pero luego de procesar los datos, me parece la pantalla de error con la siguiente respuesta




Expected response code 220 but got code "", with message "" 



No se si es porque estoy trabajando local en la maquina (no me pasó cuando trabaje con GRAILS ni con ASP.NET) o porque tengo mal la configuración. Estoy usando SWIFT MAILER y aqui les dejo el código. La idea de usar SWIFT MAILER es que me permite añadir un Attachment al correo.




//Create a new Transport object

Yii::import('ext.swiftMailer.SwiftMailer');

$host = 'smtp.gmail.com.';

$port = 465;

$SM = Yii::app()->swiftMailer;

$Transport = SwiftMailer::smtpTransport($host, $port)

->setUsername('email')

->setPassword('password');


$Mailer = $SM->mailer($Transport);

$Message = $SM

->newMessage('Se ha publicado su documento')

						        

->setFrom(array('email' => 'Example Name'))

->setTo(array('email' => 'Recipient Name'))

->setSubject('Your subject')

//->addPart($content, 'text/html')

->setBody('Hola, soy tu amigo Rodney');

 

    // Send mail

$result = $Mailer->send($Message);



Todo esta dentro de la funcion actionCreate()

Gracias por la ayuda nuevamente