Перейти к содержимому

Сервис обмена электронных валют

Партнерская программа Kredov

Получить ответ от загрузчика php в javascript

#1 gheka

gheka
  • Пользователь
  • 6 сообщений
  • Репутация: 0
0

Отправлено 27 Март 2012 - 00:16

Здравствуйте есть скрипт jQuery Uploadify. загрузчик файлов на сервер


$(document).ready(function() {
$("#uploadify").uploadify({
  'uploader'	   : '../scripts/uploadify.swf', // Относительный путь к файлу uploadify.swf. По умолчанию uploadify.swf
  'script'		 : '../goods_loader.php', // Относительный путь uploadify.php. По умолчанию uploadify.php. Это скрипт - загрузчик. Обязательно посмотрите его
  'cancelImg'	  : '../scripts/cancel.png', // Относительный путь до картинки cancel.png. По умолчанию cancel.png
  'folder'		 : '../files/', // Путь к папке, в которой Вы хотите сохранять загружаемые файлы.
									  //Эту настройку можно опустить, тогда папку загрузки необходимо определить в uploadify.php
									  //Помните! На большистве хостингов, папка, в которую Вы пытаетесь загрузить файлы должна быть доступна на запись, не забудьте выставить соответствующие права.
  'scriptData': {'id_g' : id_g,'id_s' : id_s}, // Передаём в загрузчик ID g и ID s
  
  'queueID'		: 'fileQueue', // ID элемента, в котором будет показываться очередь загрузки
		'queueSizeLimit' : '3', // Лимит очереди (максим. число загруж файлов). По умолчанию 999
  'auto'		   : false, // Если истина, загрузка начнется сразу после выбора файлов
  'multi'		  : true,  // Если истина, то разрешена загрузка нескольких файлов
		'fileDesc'	   : 'только фотографии jpg', // Текст, который будет внизу появляющегося диалогового окна. Без этого параметра будет написано "Все файлы('.')"
		'fileExt'		: '*.jpg; *.jpeg; *.JPG; *.JPE; *.jpe', // разрешенные к загрузке файлы (остальные вдиалолговом окне будути скрыты)
		'sizeLimit'	  : 1111111111, // Макс. Размер файла для каждой загрузки (в байтах). Если не указываем, ограничено будет только настройками Вашего сервера
		'simUploadLimit' : 1, // Ограничение на кол-во одновременных закачек. По умолчанию 1. Если значение равно 1, то загружаться будет 1 файл, а остальные будут стоять за ним в очереди. Если 2 - два загружаются, остальные ждут их  и т.д
		'buttonText'	 : 'File', // Текст на кнопке. По умолчанию BROWSE. К сожалению русскийтекст не поддрживается
		'buttonImg'	  : '../image_s/choose_files.png', // Путь до картинки, которая будет служить кнопкой. Компенсирует недостаток предыдущей. Если эта настройка указана, предыдущая будет проигнорирована
	  'width' : 190,
   'height' : 43,
   // 'onInit'		: alert('Скрипт готов!'),// Функция, которая срабатывает, когда скрипт будет загружен. По умолчанию обработчик событий скрывает целевой элемент на странице и заменяет его с флэш-файл, затем создает очереди контейнера после него.
		/*
		'onSelect'	   : function(event, queueID, fileObj){ // Функция, которая сработает, при выборе каждого файла. Пример:
							var string =  'Имя фала: '	 + fileObj.name  +'n';
								string += 'Размер файла: ' + fileObj.size  + 'байтn';
								string += 'Тип: '		  + fileObj.type  + 'n';
								string += 'ID в очереди: ' + queueID	   +'n'; // уникальный ID файла, генерируется скриптом
							alert(string)
						 },
		'onSelectOnce'  : function(event, data){   //Функция, которая вызывается один раз для каждой операции выбора.
							var string  = 'Файлов в очереди: '				  + data.fileCount	  +'n';
								string += 'Было выбрано файлов: '			   + data.filesSelected  +'n';
								string += 'Заменено файлов в очереди: '		 + data.filesReplaced  +'n';
								string += 'Итоговый вес файлов в очереди: '	+ data.allBytesTotal  +'n';
							alert(string);
		},
		*/
		'onProgress'	: function(event, queueID, fileObj, data){  // Срабатываети каждый раз в ходе изменений во време загрузки
						  var string   = 'Загружаем: '							 + fileObj.name			+'<br />';
							  string  += 'Размер: '								+ fileObj.size			+'<br />';
							  string  += 'Тип: '								   + fileObj.type			+'<br />';
							  string  += 'загрузка текущего файла: '			   + data.percentage		 +'%<br />';
							  string  += 'загружено байт текущего файла: '		 + data.bytesLoaded		+'<br />';
							  string  += 'загружено байт всей очереди: '		   + data.allBytesLoaded	 +'<br />';
							  string  += 'скорость загрузки, KB/s: '			   + data.speed			  +'<br />';
							  $('#info,#info2').show();
							  $('#info').html(string);
		},
		'onComplete'	: function(event, queueID, fileObj, response, data){ // Срабатывает когда файл загружен на сервер. По умолчанию файл удаляется из очереди, но мы можем и добваить свои какие-либо действия
						  var string   = 'Загружен файл: '						 + fileObj.name			+'<br />';
							  string  += 'Путь до файла: '						 + fileObj.filePath		+'<br />';
							  string  += 'Размер, байт: '						  + fileObj.size			+'<br />';
							  string  += 'Тип: '								   + fileObj.type			+'<br />';
							  string  += 'Пришел ответ от сервера: '			   + response				+'<br />';
							  string  += 'Файлов в очереди: '					  + data.fileCount		  +'<br />';
							  string  += 'скорость загрузки, KB/s: '			   + data.speed			  +'<br />';
		
		 // Вывод ошибок
		 if(response == 1){alert('Изображение загружено');}'
		 if(response == 2){alert('Произошла ошибка! Формат изображения неподходит.');}
		 if(response == 3){alert('Произошла ошибка! Размер изобаржения превышает норму.');}
		 if(response == 4){alert('Произошла ошибка! Попробуйте ещё раз загрузить изображение.');}
							
							  $('#info2').append('<br />Фаил ' + fileObj.name + ' загружен!<br />');					  
		  
		},
		'onAllComplete' : function(event, data){ // Срабатывает когда все загрузки завершены
						  var string   = 'Загружено файлов: '					  + data.filesUploaded	   +'n';
							  string  += 'Ошибок: '								+ data.errors			  +'n';
							  string  += 'Всего загружено kбайт: '				 + data.allBytesLoaded/1024 +'n';  
						
								$('#info,#info2').fadeOut(5000, function() { $('#info,#info2').html('');}); // Плавно прячем информационные блоки и затем очищаем их		  
			  location.reload();
  }
			  
	  
});
  
});

и есть обработчик - загрузчик php


if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
  
	if(!$_REQUEST[folder]) $folder = '../uploads/'; // Если в js-части мы не определили директорию загрузки, мы можем сделать это здесь
	else $folder = $_REQUEST['folder'];
  
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $folder . '/';
$ext = preg_replace('/(?:.*)(.{1}[a-zA-Z]{3,4})$/','$1', $_FILES['Filedata']['name']); // определяем расширение загружаемого файла
$unic_name  = time().'_'.rand(0,1000).$ext;
	$targetFile =  str_replace('//','/',$targetPath) . $unic_name;



  move_uploaded_file($tempFile,$targetFile);
  echo "1"; // Отправляем ответ. Например, просто 1

[color=#000088][font=monospace][size=3][left]$res[/left][/size][/font][/color][color=#008080][font=monospace][size=3][/size][/font][/color][color=#339933][font=monospace][size=3][left]=[/left][/size][/font][/color][color=#008080][font=monospace][size=3][/size][/font][/color][color=#CC66CC][font=monospace][size=3][left]544[/left][/size][/font][/color][color=#339933][font=monospace][size=3][left];[/left][/size][/font][/color][color=#008080][font=monospace][size=3][left] передать это значение[/left][/size][/font][/color]
}
В

javascript скрипте есть элемент response передающий ответ под средством echo но им можно передать лишь одно значения а мне нужно хотя бы предать как минимум 2 значения.

Подскажите пожалуйста как мне передать полученное значение переменной допустим $res из загрузчика php в javascript который показан в самом начале?

И как мне его так открыть. ?


 

 

  • 0

#2 c0ns0l3

c0ns0l3
  • Пользователь
  • 264 сообщений
  • Репутация: 49

Отправлено 29 Март 2012 - 06:22

Воспользуйся тем же response, и выведи им массив данных при помощи форматирование его в json (php::json_encode([array])), после чего js ($.parseJSON([string])) его декодирует. На выходе ты получишь уже в JS массив данных, который был передан одной переменной string.
  • 0

#3 gheka

gheka
    Topic Starter
  • Пользователь
  • 6 сообщений
  • Репутация: 0

Отправлено 30 Март 2012 - 23:24

Можно как то написать поподробнее или привести полностью код? Просто я делаю так:

PHP
$json_data = '{"name":"ii"}';
echo json_encode($json_data);
JS
var obj = jQuery.parseJSON(response);
  if(obj.name === "ii" ){
alert('ответ получен');
		 }

Но сообщения не выводит значит я чтото делаю не так.
  • 0

#4 c0ns0l3

c0ns0l3
  • Пользователь
  • 264 сообщений
  • Репутация: 49

Отправлено 04 Апрель 2012 - 13:49

Ну немного нита :)

в РНР у тебя идет массив, который ты должен конвертнуть в JSON. тоесть

$return = array ('name'=>'c0ns0l3','data'=>'some data text');
$json_return = json_encode($return);

в яваскрипте - после того, как ты применишь метод $.fn.parseJSON(response), ты на выходе получишь такую же переменную, которую ты кодировал в РНР еще, тоесть тот же массив данных. И обращаться к данным ты будешь типа:
var returned = $.parseJSON (response);
alert(returned['name']);

PS у тебя есть замечательные ф-ции, такие как в РНР var_dump а в JS - console.log (Chrom, Opera, FF) в который ты можешь выкинуть тупо всю свою переменную,обжект и ты в логе увидишь что у тебя там творится, и не тыкакть на впопад в название переменных.

PSS если ты хочешь всеголишь 2 переменные передать типа имя и еще что-то, то сделай разделитель между ними какой-то уникальный, типа "%*%*%??", после чего ты получишь одну переменную вида "c0ns0l3%*%*%??дата рождения допустим", что делать дальше с ней? применим ф-цию split('%*%*%??') к данной переменной, которая разобьет нам string на на массив, который будет иметь ряд данных в которых был разделителем тот самый "%*%*%??".
  • 0


Оформление форума – IPBSkins.ru