Może zacznę od wklejenia kodu.
<?php public function indexAction() { $request = new Zend_Controller_Request_Http(); Zend_Loader::loadClass('Form_UploadForm'); $uploadForm = new Form_UploadForm(); if ($request->isPost()) { $this->_helper->layout->disableLayout(); if (!$uploadForm->isValid($request->getPost())) { // Próba walidacji formularza $information = 'Błąd podczas sprawdzania poprawności formularza. <br />' . '<em>'.$messages.'</em>'; } elseif (!$uploadForm->uploadFile->isUploaded()) { // Czy cokolwiek zostało wysłane? $information = 'Nie wybrano pliku do wysłania.'; } elseif (!$uploadForm->uploadFile->receive()) { // Odbiór pliku $information = 'Błąd podczas odbierania pliku.'; } else { // Sukces $information = 'Plik ' . $uploadForm->uploadFile->getFileName() . ' został poprawnie wysłany.'; } } else { $information = 'Wyślij plik używając poniższego formularza:'; } if ($request->getParam('asyncUpload')) { /* Żądanie asynchroniczne */ echo <<<STOP <script type="text/javascript"> window.parent.finishUpload("$information"); </script> STOP; } else { /* Wyrenderowanie widoku */ $this->view->uploadForm = $uploadForm; $this->view->information = $information; } } ?>
A teraz skrypt js:
<?php $(document).ready(function() { // Ukryta ramka do wysyłania plików var iFrame = $('<iframe name="uploadFrame" id="uploadFrame" src=""></iframe>').hide(); // Dopisanie ramki do dokumentu $('body').append(iFrame); // Dostosowanie formularza aby wysyłał dane do ramki $('#uploadForm').attr('target', 'uploadFrame'); // Poinformowanie serwera o tym że plik jest wysyłany asynchronicznie $('#uploadForm').attr('action', '/index/index/asyncUpload/1'); // Zablokowanie formularza na czas wysyłania pliku. // W tym miejscu można poinformować użytkownika o tym że // coś się dzieje w tle. $('#uploadForm').submit(function() { $('#uploadForm #submit').attr('disabled', 'disabled'); $('#information').html('Wysyłanie pliku - proszę czekać'); return true; }); // Ta funkcja zostanie wywołana przez ramkę gdy wysyłanie zostanie // zakończone. window.finishUpload = function(information) { $('#information').html(information); $('#uploadForm #submit').attr('disabled', ''); } }); ?>
I teraz pytanie brzmi:
Jeśli zmienię miejsce formularza na adminAction i w skrypcie dam odpowiedni url:$('#uploadForm').attr('action', '/index/admin/asyncUpload/1');
to wówczas plik owszem jest przesyłany, ale cały czas mam komunikat, że plik jest wysyłany i nie uruchamia się ostatnia funkcja skryptu js.
Dlaczego?
Z góry dziękuję za odpowiedź.
EDIT:
Problem rozwiązany. Aż wstyd

Temat do zamknięcia.