Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.04.2011, 18:02
Новичок на форуме
Отправить личное сообщение для Djeman Посмотреть профиль Найти все сообщения от Djeman
 
Регистрация: 07.03.2011
Сообщений: 9

Простая загрузка файла с ajax через форму
Есть аякс-отправка данных:
$.ajax({
				url:'/art/add',
				type:'POST',
				data:'name='+$('#form-name input').val()+'&vid='+$('#form-vid select').val()+'&opisanie='+$('#form-opisanie textarea').val()+'&pol='+$('#form-pol select').val()+'&phone='+$('#form-phone input').val(),
				success:function(res){
...
				}
			});

Проблема в том, что не получается таким образом загрузить файл. На сервере у меня вызывается скрипт (Zend File), который принимает файл и записывает его в определенную директорию. Если отправка происходит без аякса, то всё работает хорошо, но с аяксом файл не принимается на сервере. Можно ли как нибудь сервер заставить "увидеть" файл, без лишних плагинов?
Заранее спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 02.05.2011, 02:58
Новичок на форуме
Отправить личное сообщение для Guerra Посмотреть профиль Найти все сообщения от Guerra
 
Регистрация: 10.04.2011
Сообщений: 6

Файлы нельзя загрузить аяксом, только текст. Можно сделать имитацию аякса через
iframe
Или через флеш загрузчик
Ответить с цитированием
  #3 (permalink)  
Старый 02.05.2011, 10:15
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

почитайте эту статью. должна помочь

хабрахабр

вот еще


вот пример из статьи. работает,кстати. щас у себя проверил

<html>
<head>
<script type="text/javascript">
 function onResponse(d) {
 eval('var obj = ' + d + ';');
 alert('Файл ' + obj.filename + (obj.success ? " " : " НЕ ") +
    "загружен.");
 }
 </script>
</head>

<iframe id="rFrame" name="rFrame" style="display: none">
</iframe>

<form action="handler.php" target="rFrame" method="POST"
   enctype="multipart/form-data">
<input type="file" name="loadfile">
<input type='submit' value='Загрузить'>
</form>

</html>


handler.php :

<?php
 function jsOnResponse($obj)
 {
 echo '
 <script type="text/javascript">
 window.parent.onResponse("'.$obj.'");
 </script>
 ';
 }

// поставить тут *!*./*/!* , если используется windows,а не линукс
 $dir = '/home/path/path/path';

 $name = basename($_FILES['loadfile']['name']);
 $file = $dir . $name;

 $success = move_uploaded_file($_FILES['loadfile']['tmp_name'], $file);
 jsOnResponse("{'filename':'" . $name . "', 'success':'" . $success . "'}");

?>

Последний раз редактировалось melky, 02.05.2011 в 10:23.
Ответить с цитированием
  #4 (permalink)  
Старый 02.05.2011, 10:46
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Подобным образом можно и без фрейма. возврат заголовка 204 у страницы таргет.и нет фрейма ,и не перезагружает страницу после отправки
Ответить с цитированием
  #5 (permalink)  
Старый 02.05.2011, 10:47
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

зато можно ответить любым текст ом из пхп)
Ответить с цитированием
  #6 (permalink)  
Старый 02.05.2011, 11:02
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

dmitriymar,
а как узнать, что загрузка завершена?
Ответить с цитированием
  #7 (permalink)  
Старый 02.05.2011, 11:49
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Завершена обмен синхронный ведь в этом случае. сценарии на время отправки по идее остановяться и заработают после отправки. соответственно после сабмита можно след строкой вывести сообщение файл отправлен
да это ясно ,что это полурешения. вот что интересно-но нет времени попробовать. в канву вместо изображения можно закинуть любой файл?по идее должно быть без разницы что в неё закидывать. но а если не графика придётся переконвертировать из представления канвы в бинарный на сервере
Если да-то ничего не помешает считать от туда код и отправить его на сервер аяксом. там принять и сделать файл из этого.
Но это д..ч

Последний раз редактировалось dmitriymar, 02.05.2011 в 11:58.
Ответить с цитированием
  #8 (permalink)  
Старый 02.05.2011, 12:28
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от dmitriymar
обмен синхронный ведь в этом случае
С чего бы это?
Ответить с цитированием
  #9 (permalink)  
Старый 02.05.2011, 12:39
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Везде где встречал писали что формы синхронны.хотя причём синхронность к редиректу...
Ответить с цитированием
  #10 (permalink)  
Старый 03.05.2011, 04:07
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Вместе с 204 No Content сервер может установить куку. Можно отправить форму с токеном-случайной строкой и по десятку раз в секунду проверять document.cookies, не появилась ли там кука с именем, равным значению токена. После чего прочитать значение куки и тут же убить её.

Это сугубо "лабораторный" способ, само собой. Использовать на практике можно, но незачем - во-первых, через задницу, во-вторых, преимуществ перед отправкой в ифрейм никаких.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
загрузка файла через скрытый iframe и потеря связи с сервером vahrusha AJAX и COMET 5 01.06.2011 14:43
Загрузка файла без AJAX. B~Vladi Internet Explorer 36 25.01.2011 21:05
Послать форму загруженную через ajax в div используя ajax ncux jQuery 2 16.08.2010 17:36
Загрузка файла в массив строк с помощью AJAX malcomoffice AJAX и COMET 2 08.06.2010 18:02
загрузка файла по принципу ajax neadekvat Общие вопросы Javascript 2 12.05.2009 22:23