Я пытаюсь отправить форму, которая включает в себя загрузку файла через Ajax / jQuery, обработать форму через PHP-скрипт и вернуть результат в div, в котором первоначально находилась форма.
Мой текущий код формы:
<section id="content-right"> <form name="uploader" id="uploader" method="POST" enctype="multipart/form-data"> <input type="hidden" id="MAX_FILE_SIZE" name="MAX_FILE_SIZE" value="10485760" /> <input type="file" name="fileselect" id="fileselect" /> <input type="submit" name="submit" id="submit" value="Upload" /> </form> </section>
И мой текущий сценарий Ajax / jQuery:
<script> $(function() { $('#uploader').submit(function() { $(this).ajaxSubmit({ type: $(this).attr('method'), url: 'upload-song.php', success: function(response) { $('#content-right').html(response); } }); return false; }); });
Мой PHP-скрипт – «upload-song.php» (подробности не имеют значения).
У меня также есть YUI.Pjax, выполняющий обработку обычных ссылок навигации (href) и загружающих их в # content-right (если пользователь нажимает что-либо, я хочу, чтобы он загружался в # content-right).
С этой настройкой, проводка по нормальным ссылкам работает отлично, все загружается в # content-right, но загрузчик работает только в другое время.
Например, загрузчик загрузит upload-song.php в # content-right и обработает все отлично, тогда, если я перейду от страницы и попытаюсь загрузить другой элемент, он не будет работать, он просто обновит страницу (если я поставлю action = "upload-song.php" в теге формы, он будет загружать upload-song.php в виде полной страницы, а не в # content-right). После обновления страницы я могу загрузить другой элемент, и он будет работать отлично.
Я думаю, что это связано с тем, как я прикрепляю свой сценарий Ajax к форме submit (потому что, если я обновляю страницу, она отлично работает), но у меня нет большого опыта работы с этими языками, поэтому я не уверен как это исправить.
Кроме того, если я отключу YUI.Pjax, он исправляет загрузчик, но, очевидно, нарушает мои ссылки, поэтому я ищу работу.
Есть идеи?
Попробуй это:
$(document).on("submit", "#uploader", function() ...
Этот синтаксис позволит событию отправить пузырь в документ. Таким образом, когда раздел #content_right
перезагружается, документ сохраняет ответ прослушивания событий, настроенный в функции готовности DOM.