Witam,
posługując się tym tutorialem postanowiłem zrobić formularz w wysyłający pliki bez przeładowywania strony Zend Frameworku.
Tak więc gdy wybiorę sobie jakiś plik i kliknę na "Wyślij" to przycisk robi się "disabled" i pojawia się napis "Wysyłanie pliku - proszę czekać" i... tyle. Plik oczywiście jest kopiowany na serwer, ale w przeglądarce nic się nie dzieje sad.gif
Tak wygląda mój formularz:
  1. $this->addElement('file', 'uploadFile', array(
  2. 'destination' => 'uploads/',
  3. 'validators' => array(
  4. array('count', false, 1)
  5. // array('size', false, 6553600000),
  6. ),
  7. 'label' => APPLICATION_PATH.'/uploads'
  8. ));
  9.  
  10. $this->addElement('submit', 'submit', array(
  11. 'label' => 'Wyslij'
  12. ));
  13.  
  14. $this->setEnctype('multipart/form-data');
  15. $this->setAttrib('id', 'uploadForm');

kotroler:
  1. $uploadForm = new UploadForm();
  2. $request = new Zend_Controller_Request_Http();
  3. Zend_Registry::set('request', $request);
  4.  
  5. if ($request->isPost()) {
  6. $uploadForm -> getValues();
  7.  
  8.  
  9.  
  10. if (!$uploadForm->isValid($request->getPost())) { // Próba walidacji formularza';
  11. $messages = implode('<br />', $uploadForm->uploadFile->getMessages());
  12. $information = 'Błąd podczas sprawdzania poprawności formularza.';
  13. } elseif (!$uploadForm->uploadFile->isUploaded()) { // Czy cokolwiek zostało wysłane?
  14. $information = 'Nie wybrano pliku do wyslania.';
  15. } elseif (!$uploadForm->uploadFile->receive()) { // Odbiór pliku
  16. $information = 'Blad podczas odbierania pliku.';
  17. } else { // Sukces
  18. $information = 'Plik ' . $uploadForm->uploadFile->getFileName()
  19. . ' został poprawnie wyslany.';
  20. }
  21.  
  22. if ($request->getParam('asyncUpload')) {
  23. echo "
  24. <script type=\"text/javascript\">
  25. window.parent.finishUpload(".$information.");
  26. </script>
  27. ";
  28. }
  29.  
  30. } else {
  31. $information = 'Wyslij plik uzywajac ponizszego formularza:';
  32. }
  33.  
  34. $this->view->uploadForm = $uploadForm;
  35. $this->view->information = $information;

i widok:
  1. $(document).ready(function() {
  2. // 1.
  3. var iFrame = $('<iframe name="uploadFrame" id="uploadFrame" src=""></iframe>');
  4. $('body').append(iFrame);
  5.  
  6. // 2.
  7. $('#uploadForm').attr('target', 'uploadFrame');
  8.  
  9. // 3.
  10. $('#uploadForm').attr('action', '?asyncUpload=1');
  11.  
  12. // 4.
  13. $('#uploadForm').submit(function(){
  14. $('#uploadForm #submit').attr('disabled', 'disabled');
  15. $('#information').html('Wysyłanie pliku - proszę czekać');
  16. return true;
  17. });
  18. // 5.
  19. window.finishUpload = function(information){
  20. alert('koniec');
  21. $('#information').html(information);
  22. $('#uploadForm #submit').attr('disabled', '');
  23. }
  24. });
  25. </script>
  26. </head>
  27. <div id="wrapper">
  28. <h1>Wysyłanie plików przy użyciu Zend_Form i jQuery - Przykład 1</h1>
  29. <div id="information">
  30. <?= $this->information ?>
  31. </div>
  32. <?= $this->uploadForm ?>
  33. </div>
  34. </body>
  35. </html>

Z góry dzięki za pomoc.
A może ktoś zna jakiś dobry przykład takiego skryptu (niekoniecznie w ZF)?

Pozdrawiam smile.gif

EDIT: problem rozwiązany, a przyczyna okazała się bardzo błaha:
w 2. listingu w 25. linijce zapomniałem dodać apostrofów, więc powinno być tak:
  1. window.parent.finishUpload(".$information.");

smile.gif