Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.09.2013, 12:11
Новичок на форуме
Отправить личное сообщение для 4y4yHDRA Посмотреть профиль Найти все сообщения от 4y4yHDRA
 
Регистрация: 28.08.2013
Сообщений: 7

После загрузки файла, открывает новую страницу, вместо вставки результата в DIV
Здравствуйте, уважаемые специалисты!
Подскажите пожалуйста в чем может быть проблема... осуществляю загрузку файла на сервер, файл грузится и все норм отрабатывает, но результат getfile.php, почему то отображается в новом окне, а не в div#message... и я полагаю по этой же причине не срабатывает вызов функции calcsave() в getfile.php.

код формы:
<?php
	session_start();
	$calcid = $_POST['calcid'];

	echo "<center>";
	if (($calcid != "") AND ($calcid != "0"))
	{
		echo "Максимальный размер файла: ".ini_get('upload_max_filesize')."
		<table border ='0' width='100%'> 
		<tr><td>
		<form id='myForm' action='lc/getfile.php' method='post' enctype='multipart/form-data'>
			 <input type='file' size='10' accept-charset='utf-8' name='myfile'>
			 <input type='text' size='10' name='calcid' value='".$calcid."' hidden>
			 <input type='submit' value='Загрузить...' onclick='loadfile();'>
		 </form>
		<div id='message'></div>
		</td></tr></table>
		<script>
		function loadfile()
		{
			var fd = new FormData();
			fd.append('calcid', '".$calcid."');
			fd.append('myfile', $('#myfile').files);
			
			$.ajax({
				dataType: 'HTML',
				async: false,
				  type: 'POST',
				  url: 'lc/getfile.php',
				  data: fd,
				  cache: false,
				  processData: false,
				  contentType: false,
				  success: function(data) {
					alert('sucs');
					$('div#message').html(data);
				  },
				 error: function(data) {
					alert('err');
					$('div#message').html(data);
				 },
				  complete: function(data) {
					alert('compl');
					$('div#message').html(data);
				  }
				});
		}
		</script>";
	}	
	else
	{
		echo "Перед прикреплением файла необходимо сохранить расчет!";
	}
	echo "</center>";
?>


getfile.php
<?php
$calcid = $_POST['calcid'];
$output_dir = "calcimg/";
 
if(isset($_FILES["myfile"]))
{
    if ($_FILES["myfile"]["error"] > 0)
    {
		$errtxt = ($_FILES["myfile"]["error"]=="1")?"Превышен максимальный размер файла":$_FILES["myfile"]["error"];
		echo "Ошибка: " . $errtxt . "<br>";
    }
    else
    {
		$truefilename = $_FILES["myfile"]["name"];
		//$s = mb_detect_encoding($truefilename);
		//$truefilename = iconv($s, 'CP1251//TRANSLIT', $truefilename);
        move_uploaded_file($_FILES["myfile"]["tmp_name"],$output_dir.$calcid."_".$truefilename);
 
		 echo "Прикрепленный файл: <div id='calcfile'>".$truefilename."</div>";
		 echo "<script>calcsave();</script>";
    }
}
?>


Спасибо...!
Ответить с цитированием
  #2 (permalink)  
Старый 24.09.2013, 18:28
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

попробуй заменить на
onclick='loadfile(); return false; '
Ответить с цитированием
  #3 (permalink)  
Старый 25.09.2013, 00:32
Новичок на форуме
Отправить личное сообщение для 4y4yHDRA Посмотреть профиль Найти все сообщения от 4y4yHDRA
 
Регистрация: 28.08.2013
Сообщений: 7

Спасибо за Ваш ответ, но в таком случае, getfile.php вообще ни чего не делает...((
Без return false; он полностью отрабатывает, только вывод результата
echo "Прикрепленный файл: <div id='calcfile'>".$truefilename."</div>";
echo "<script>calcsave();</script>

происходит в новом окне и соответственно функция calcsave() не отрабатывает т.к. не найдена
Не могу понять почему не отрабатывает
$('div#message').html(data);
Ответить с цитированием
  #4 (permalink)  
Старый 25.09.2013, 01:05
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

4y4yHDRA,
Целиком data - вряд ли подгрузиться, поскольку в ней типично
<!DOCTYPE> и <HTML>
Поэтому нужно выпарсить нужный контент из data для вставки
Ну к примеру так:
var Myblk = $(data).find('#нужный блок');
Myblk.appendTo('div#message');

Хотя проще использовать для загрузки load
http://jquery-docs.ru/Ajax/load/#urldatacallback
Ответить с цитированием
  #5 (permalink)  
Старый 26.09.2013, 13:45
Новичок на форуме
Отправить личное сообщение для 4y4yHDRA Посмотреть профиль Найти все сообщения от 4y4yHDRA
 
Регистрация: 28.08.2013
Сообщений: 7

Спасибо за Ваш вариант.
Уже по всякому... ни как не выходит, через load тоже... еще немного поразбираюсь, как надоест скачаю плагин
Но очень хотелось бы без него...
Ответить с цитированием
  #6 (permalink)  
Старый 13.10.2013, 12:39
Аватар для Dozentos
Аспирант
Отправить личное сообщение для Dozentos Посмотреть профиль Найти все сообщения от Dozentos
 
Регистрация: 08.10.2013
Сообщений: 47

Я не спец, но по-моему ajax не может асинхронно загружать файлы на сервер (объект XMLhttpRequest этому не обучен), соответственно этого не может и метод $ajax jQuery.
Для выполнения аналогичной задачи я использовал скрытый элемент iframe. Есть плагин jQuery, который упрощает выполнение этой операции (не помню как называется, что-то вроде FormPlaggin), он исходя из документации по нему также использует скрытые iframe, только происходит это "за кадром" для пользователя jQuery.

Ещё раз подчеркну, что не претендую на абсолютную правоту, я не спец.
Ответить с цитированием
  #7 (permalink)  
Старый 13.10.2013, 13:53
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от 4y4yHDRA
Уже по всякому... ни как не выходит, через load тоже... еще немного поразбираюсь, как надоест скачаю плагин
Но очень хотелось бы без него...
Гы - использование конструкции $.ajax({
Уже подразумевает наличие на странице библиотеки jQuery
Ответить с цитированием
  #8 (permalink)  
Старый 13.10.2013, 13:55
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Dozentos
но по-моему ajax не может асинхронно загружать файлы
Ошибаетесь => http://jquery-docs.ru/Ajax/jQuery.ajax/#options
Cм. async
Ответить с цитированием
  #9 (permalink)  
Старый 13.10.2013, 14:43
Аватар для Dozentos
Аспирант
Отправить личное сообщение для Dozentos Посмотреть профиль Найти все сообщения от Dozentos
 
Регистрация: 08.10.2013
Сообщений: 47

Deff,
в предложенной вами ссылке не нашёл ничего, что позволяло бы думать, что объект XMLHttpRequest умеет асинхронно передавать файлы на сервер.
Вот одна из возможностей реализации такой задачи http://ruseller.com/lessons.php?rub=37&id=1873
но здесь используется <script type="text/javascript" src="jquery.wallform.js"></script>
и $("#imageform").ajaxForm({...});
Надо думать не зря..? Зачем такие изыски, если можно было бы обойтись стандартными средствами библиотеки jQuery?
Ответить с цитированием
  #10 (permalink)  
Старый 13.10.2013, 14:46
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Dozentos
в предложенной вами ссылке не нашёл ничего, что позволяло бы думать, что объект XMLHttpRequest умеет асинхронно передавать файлы на сервер.
Dozentos,
Приведите ссылку ?, по-моему все ссылки на стандартные методы jquery
async - Смотрели на странице ? И проще открыть и глянуть метод в самом jquery

Или учебник http://learn.javascript.ru/ajax-xmlhttprequest
См Синхронный вызов

Последний раз редактировалось Deff, 13.10.2013 в 14:50.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
После вставки html кода через "jQuery html()" скролл автоматом прокручивает страницу E-Roman Элементы интерфейса 4 06.05.2013 06:54
не закрывается DiV после загрузки в него файла sfumato jQuery 0 02.06.2011 21:05
Аjax запрос формирует div с изображениями, нужно показать после загрузки изображений Khmelevsky AJAX и COMET 2 13.09.2010 23:16
Загрузка файла AJAX'ом - почему-то переводит на страницу загрузки файла .andreev AJAX и COMET 13 21.10.2009 22:25