jQuery .submit () загрузить ответ отображения формы, возвращенный Slim PHP

У меня есть html-форма, используемая для загрузки файла на сервер. Для краткости я показал только основные точки

<form id='uploadform' method='post' enctype='multipart/form-data' action='index.php/upload'> <input name='myFile' id='myFile' type='file'/> </form> <input type='button' id='upload' value='Upload'/> <div id='response'></div> 

Я использую jQuery.submit () для отправки формы:

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

Бизнес-логика – это Slim PHP: $ app-> post ('/ upload', 'uploadFile'); ….

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

Проблема. Если загрузка по какой-либо причине не выполняется, генерируется исключение, пользователь переходит на страницу ошибок PHP. Если загрузка завершена без исключения, приложение перенаправляется на главную страницу.

Требуется следующее: если загрузка успешно завершена, приложение должно быть перенаправлено на главную страницу, как и сейчас … но если возникло какое-либо исключение, вместо перехода на страницу ошибок PHP, приложение должно оставаться на странице загрузки и с помощью id = 'response' должен отображать исключение.

Можно ли сделать что-нибудь подобное с помощью jQuery submit ():

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

????

Я знаю, что плагины для загрузки файлов JQuery облегчат жизнь … но это не вариант для меня …

Спасибо за любые указатели!

Является ли это возможным

Вы должны использовать ajax, вот пример для загрузки файла с помощью ajax

Отправка multipart / formdata с помощью jQuery.ajax

с помощью ajax вы можете перенаправить обратно пользователя и отправить текст ошибки методом GET и поместить этот текст в тег ответа

У меня была аналогичная проблема в прошлом, то, что я придумал, – использовать invisble iframe для публикации загрузки файла и получения результата html, надеюсь, что это поможет!

Я думаю, это то, что вы ищете

html-код:

 <form id='uploadform' method='post' enctype='multipart/form-data' action='index.php/upload' target="hiddeniframe"> <input name='myFile' id='myFile' type='file'/> </form> <iframe name="hiddeniframe" id="hiddeniframe" style="display: none"></iframe> <input type='button' id='upload' value='Upload'/> <div id='response'></div> 

Я добавил скрытый iframe и сделал целью формы идентификатор iframe. Это сделает форму отправленной в iframe, чтобы вся страница не перезагружалась

Код javascript:

 <script type="text/javascript"> window.showUploadError = function(error) { $('#response').html(error); }; $('#uploadform').submit(); </script> 

Я добавил глобальную функцию с именем showUploadError, которая будет вызываться из функции загрузки php в случае ошибки

PHP-код

 <?php function uploadFile(){ try{ // if success uploading ?> <script type="text/javascript"> parent.location.href = '/main-page' </script> <?php die(); }catch(Exception $e){ // if error ?> <script type="text/javascript"> parent.showUploadError('Upload failed'); </script> <?php } } 

если загрузка прошла успешно, мы выводим некоторый код javascript, который перенаправляет родительскую страницу (главную страницу) на новое местоположение, иначе она вызовет функцию showUploadError javascript.

Имейте в виду, что это грубый пример, и я его не тестировал.

У вас есть опция «отправить» в «iframe», а затем «js» получит ответ. В PHP вы отправляете сообщение, которое затем интерпретируется в «JS».

HTML:

 <form id="uploadform" method="post" enctype="multipart/form-data" action="index.php/upload" target="uploadformResponse"> <input name='myFile' id='myFile' type='file'/> </form> <input type='button' id='upload' value='Upload'/> <div id='response'></div> <div style="display:none;"> <iframe name="uploadformResponse" id="uploadformResponse"></iframe> </div> 

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 }