jQuery .submit () upload form display response devuelto por Slim PHP

Tengo un formulario html utilizado para cargar archivos en el servidor. Para abreviar, solo he mostrado los aspectos esenciales

Yo uso jQuery.submit () para enviar el formulario:

  $('#uploadform').submit(); 

La lógica empresarial es Slim PHP: $ app-> post (‘/ upload’, ‘uploadFile’); ….

  function uploadFile(){ try{ // if success uploading $app->redirect('/main-page'); }catch(Exception $e){ // if error echo $e->getMessage(); } } 

Problema: si la carga falla por alguna razón, se lanza una excepción, el usuario es llevado a una página de error de PHP. Si la carga se completó sin excepción, la aplicación se redirige a la página principal.

Lo que se requiere es: si la carga tiene éxito, la aplicación debe redirigirse a la página principal como lo hace ahora … pero si se lanza alguna excepción, en lugar de ir a la página de error de PHP, la aplicación debe permanecer en la página de carga y con id = ‘respuesta’ debe mostrar excepción.

¿Es posible hacer algo como esto con jQuery submit ():

  $('#uploadform').submit(function(response){ $('response').html(response); }); 

????

Sé que los complementos de archivos de carga de JQuery me facilitarían la vida … pero esa no es una opción para mí …

Gracias por cualquier punteros!

Es posible

Necesitas usar ajax aquí hay un ejemplo para subir archivos usando ajax

Envío de multipart / formdata con jQuery.ajax

sin ajax puede redirigir al usuario de vuelta y enviar el texto de error por el método GET y poner este texto en la etiqueta de respuesta

Tuve un problema similar en el pasado, lo que se me ocurrió es usar un iframe invisible para publicar la carga del archivo y recuperar el resultado html, ¡espero que esto ayude!

Creo que esto es lo que estás buscando

código HTML:

 

Agregué un iframe oculto y convertí el objective del formulario en id del iframe. Esto hará que el formulario se envíe al iframe para que la página completa no se vuelva a cargar

código javascript:

  

Agregué una función global llamada showUploadError que se llamará desde la función de carga de php en caso de error

código php

      

si la carga es exitosa, enviamos un código javascript que redireccionará la página principal (página principal) a la nueva ubicación, de lo contrario llamará a la función javascript showUploadError.

Tenga en cuenta que este es un ejemplo crudo y no lo he probado.

La opción que tiene es enviar el “envío” a un “iframe”, luego con “js” obtener la respuesta. En PHP, envía un mensaje que luego se interpreta en “JS”.

HTML:

 

Javascript:

 var runSubmitForm = function() { var $iframe = $('#uploadformResponse'), fnLoadIframe = function(event) { $iframe.unbind('load'); var response = $iframe.contents(), aresponse = response.split('|'); console.log('debug respnse', response); if (aresponse.length != 2) { $('#response').html("Error I ???"); } if (aresponse[0] == '1') { window.location = aresponse[1]; } else if (aresponse[0] == '0') { $('#response').html(aresponse[1]); } else { $('#response').html("Error II ???"); } }; $iframe.bind('load', fnLoadIframe); $('#uploadform').submit(); }; 

PHP:

 function uploadFile(){ try{ // if success uploading echo '1|/main-page'; } catch(Exception $e) { // if error echo '0|' . $e->getMessage(); } exit; // optional }