Ver Mensaje Individual
  #3 (permalink)  
Antiguo 04/06/2017, 13:44
Leingod
 
Fecha de Ingreso: agosto-2008
Mensajes: 27
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Aplicación Cordova no recibe respuesta vía Ajax

Cita:
Iniciado por dardosmania Ver Mensaje
Yo hice una aplicacion en cordova y no tuve ningún problema con las llamadas (mi servidor era en .Net pero eso no tiene importancia).

En las promesas o callback que tiene no te llega ni al success ni al fail, tampoco salta un timeout cuando lleva mucho tiempo esperando la respuesta?
¿Que tipo de return hace tu servidor cuando termina todos los procesos?

Sin ver código no sabría decirte.
No, no envía ningún timeout. De hecho, el proceso que tiene que hacer lo realiza sin problemas, el fallo viene a la hora de dar una respuesta al usuario.

Código:
public function registrar()
    {
		// desactivar vista
        $this->autoRender = false;  
        $this->url_base = $_SERVER['DOCUMENT_ROOT'] . '/Avisos';
		$error = array('codigo' => 0);		
		$id_estado = 1;
		$id_colaborador = 0;
       
        if ($this->request->is('post')) {
			// Validamos los datos
            $validador = $this->getValidadorRegistro();            
            $val = $validador->errors($this->request->getData());           
            
            if (empty($val)) {
                $aviso = $this->setAviso(); 
				
                // Grabamos el aviso en el sistema
                $tabla_avisos = TableRegistry::get($this->tabla_avisos);
                if ($tabla_avisos->save($aviso)) {
                    $id_aviso = $aviso->get('id');					
					
					// Grabamos las fotos del aviso en el sistema
                    $lista_fotos = $this->grabarFotos($id_aviso, $aviso->get('token'));                    
					
                    // Historial
                    $this->grabarHistorial($id_aviso, $aviso->get('fecha'), $id_colaborador, $id_estado);
					
					// Enviar emails a contacto y colaboradores de la zona del aviso
					$emails_avisos = new EmailsController();
					$emails_avisos->enviarEmailsRegistro($aviso, $this->request->getData('url'), $lista_fotos);
                }
				else {
					$error['codigo'] = 2;
				}
            }
			else {
				$error['codigo'] = 1;
				$error['inputs'] = array_keys($val);
			}
        }
		else {
			$this->response->body('Fuera de aquí!');
		}
        
        echo json_encode($error);
        // Ejecutamos die() porque el sistema sigue imprimiendo cabeceras y da fallos
		    die();                             
    }
La única respuesta que obtengo al enviar el formulario es {"Codigo" => 0}

La aplicación principal es un formulario que recoge avisos de animales abandonados, los graba en la base de datos (las imágenes las sube al servidor y graba la URL en el registro del aviso), envía un correo electrónico al usuario que envía el aviso y a los usuarios de la ciudad que se indique en el formulario y por último muestra un mensaje confirmando que se ha realizado correctamente.

La versión web de la aplicación es un formulario en HTML que recoge los datos y los envía a una api externa (en el mismo servidor, pero en un subdominio) realizada con CakePHP, enviándole los datos vía JSON haciendo una petición AJAX a la api. Al resolverla, me devuelve un status 200 y realiza correctamente el proceso, mostrando su mensaje de confirmación y tal.

La versión que estoy realizando en Cordova es exactamente igual, formulario HTML, la acción del formulario lleva los datos a la función descrita más arriba y, en teoría, la petición es exactamente la misma que la realizada en la versión web.

¿Alguna sugerencia?