Foros del Web » Programando para Internet » Android »

Aplicación Cordova no recibe respuesta vía Ajax

Estas en el tema de Aplicación Cordova no recibe respuesta vía Ajax en el foro de Android en Foros del Web. Hola a todos. Tengo un problema bastante gordo para terminar un proyecto y me corre bastante prisa, espero tener un poco de suerte. He realizado ...
  #1 (permalink)  
Antiguo 01/06/2017, 17:14
 
Fecha de Ingreso: agosto-2008
Mensajes: 27
Antigüedad: 15 años, 7 meses
Puntos: 0
Aplicación Cordova no recibe respuesta vía Ajax

Hola a todos. Tengo un problema bastante gordo para terminar un proyecto y me corre bastante prisa, espero tener un poco de suerte.

He realizado con el framework Apache Cordova una pequeña aplicación muy sencilla: recojo datos mediante un formulario (datos personales y, como máxima complicacion, una imagen), los envío a un archivo PHP que convierte a JSON estos datos y, vía AJAX, los envía a un back-end realizado en CakePHP. Por último, envía un correo electrónico automáticamente al usuario.

El tema es que relleno el formulario, lo envío y se procesa de forma totalmente correcta, grabándose Mi problema llega cuando se terminan de procesar los datos: en teoría debería salirme un texto en la misma página indicándome si se ha realizado el proceso, pero en su lugar me sale una pantalla en blanco con el texto {"Codigo":0}. Lo más raro es que los correos electrónicos se envían y los datos se guardan en base de datos correctamente.

Lo único que se me ocurre es que se realizan todos los procesos y el problema surge a la hora de recoger la respuesta del AJAX y mostrar el mensaje de confirmación.

Tengo todas las directivas de seguridad abiertas a tope y el plugin whitelist activo, así que no entiendo qué puede ser.

¿Alguien con idea de Cordova puede echarme una mano? Es un proyecto que tengo que entregar a mitad de mes y me falta tiempo...

Gracias por adelanto.
  #2 (permalink)  
Antiguo 02/06/2017, 14:34
 
Fecha de Ingreso: julio-2015
Mensajes: 85
Antigüedad: 8 años, 8 meses
Puntos: 4
Respuesta: Aplicación Cordova no recibe respuesta vía Ajax

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.
  #3 (permalink)  
Antiguo 04/06/2017, 13:44
 
Fecha de Ingreso: agosto-2008
Mensajes: 27
Antigüedad: 15 años, 7 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?
  #4 (permalink)  
Antiguo 06/06/2017, 12:41
 
Fecha de Ingreso: julio-2015
Mensajes: 85
Antigüedad: 8 años, 8 meses
Puntos: 4
Respuesta: Aplicación Cordova no recibe respuesta vía Ajax

Según entiendo la web y la app movil no consumen los mismos endpoints, entonces es problema de la parte del api.

prueba a indicar el tipo de respuesta que vas ha hacer, en caso de Json
Código PHP:
Ver original
  1. $error = header('Content-Type: application/json');
  2. echo json_encode($error);

Yo no entiendo apenas PHP, no se si esa es la manera de correcta de indicarle el tipo de contenido, pero prueba a indicarselo y si no es pues a seguir descartando cosas.

Etiquetas: apache
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:11.