Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   как вернуть переменую в swfupload (https://javascript.ru/forum/jquery/62806-kak-vernut-peremenuyu-v-swfupload.html)

ureech 01.05.2016 12:24

как вернуть переменую в swfupload
 
Здравствуйте.Данный скрипт работает на сайте без аякса.Те после выбора файлов происходит перезагрузка для записи в базу.Хочу переделать на аякс, что бы сразу в базу не писалось, а просто выводилось на странице.Но не понимаю как вернуть файлы. Вот скрипт инициализации.
var swfu;
    var uploadedCount = 0;

    window.onload = function() {
        var settings = {
            flash_url: "/includes/swfupload/swfupload.swf",
            upload_url: upload_url,
            post_params: {"sess_id" : sess_id, "item_id" : item_id,"item_user" : item_user,"item_cat" : item_cat},
            file_size_limit: "400 KB",
            file_types: "*.jpg;*.png;*.gif;*.jpeg;*.JPG;*.PNG;*.GIF;*.JPEG",
            file_types_description: "",
    
            file_upload_limit : max_files,
    
            file_queue_limit : 0,
            custom_settings : {
                progressTarget : "fsUploadProgress",
                cancelButtonId : "btnCancel"
            },
            debug: false,

            // Button settings
            button_image_url: "/includes/swfupload/uploadbtn.png",
            button_width: "80px",
            button_height: "65px",
            button_placeholder_id: "spanButtonPlaceHolder",

            // The event handler functions are defined in handlers.js
            file_queued_handler : fileQueued,
            file_queue_error_handler : fileQueueError,
            file_dialog_complete_handler : fileDialogComplete,
            upload_start_handler : uploadStart,
            upload_progress_handler : uploadProgress,
            upload_error_handler : uploadError,
            upload_success_handler : uploadSuccess,
            upload_complete_handler : uploadComplete,
            queue_complete_handler : queueComplete	// Queue plugin event
        };

        swfu = new SWFUpload(settings);
    };

    function queueComplete(numFilesUploaded) {

        if (numFilesUploaded>0){
           // window.location.href = upload_complete_url;
        }
		
    }

Предположим ajax.php возвращает переменую или массив $file. Как мне её теперь вернуть на страницу, upload_complete_url, как я понимаю?

aklis 01.05.2016 13:23

http://learn.javascript.ru/ajax-xmlhttprequest

Тут об AJAX. Все просто и доступно - делаем запрос, получаем ответ и обрабатываем его.
При прочтении этой темы у меня возникло впечатление что вы не в курсе что оно такое AJAX и как работает. Я так и не понял при чем тут ajax.php

laimas 01.05.2016 14:35

ureech,
swfupload.swf как раз для асинхронной загрузки, хотя можно и пренебречь ею. Для современных браузеров это уже пережиток, они и без этого сами справляются.
А вот при успешной загрузке возвращаются не файлы, а либо теги изображений, либо только пути шлюзов для них, и поместив это на клиенте, можно получить изображения.

ureech 01.05.2016 14:48

laimas,В этом и и было дело, что не понятно как на клиенте получить эти теги.Вроде нашёл решение, не знаю как будет работать, посмотрю.После обработки и загрузки фото в
function queueComplete(numFilesUploaded) {

        if (numFilesUploaded>0){
           // window.location.href = upload_complete_url;
        }
		
    }

передал аякс запросом что надо
function queueComplete(numFilesUploaded) {

        if (numFilesUploaded>0){   	
$.post("/components/board/ajax/get_photo.php", {"user_id":item_user}, function(data) {
			alert(data)
			});
}
}

обработал и теперь на выходе имею имена файлов.

laimas 01.05.2016 14:56

Вам не просто имена нужны, а пути на сервере куда они были загружены, ну или если загрузка постоянно в фиксированный каталог или же каталог перед операцией определен, то достаточно и имен, но с условием, что используются оригинальные имена, а не сервер их формирует при загрузке.
А уж по ним вывести изображения на клиенте, так какая тут может быть проблема?

ureech 01.05.2016 16:06

laimas,
Всё верно. Проблема на данный момент в следующем.Имею на выходе
$.post("/components/board/ajax/get_photo.php", {"user_id":item_user}, function(data) {  
          document.getElementById('load').innerHTML= data;		
			});

строку со списком файлов.
. .. 1dfe4f3626dbce88db21157698e59009.jpg 2096a1c62e80c92fe47bb3e9b1618e77.jpg 394d20c2475c9529607fbe5fc7acd33a.jpg 4040d526d29405cb7d2e6b6ca7ace790.jpg 7e4082367c2ea4c26d556ad1afaf38ff.jpg 9481a0a7ff9742548f71ba3656c9a668.jpg a05e7aafcbef351885a8789d55aa078d.jpg b3c7778c6dab5ee7455deaec13d9c0b6.jpg f9b13106b167d7c17afe9fd94352001b.jpg

Не понимаю как мне их превратить в картинки. В том плане, что вставить имя в img src="" , получить нужное кол-во и превратить в какой то динамический список html, типа <ul><li>$file</li></ul>
Пробовал выводить в цикле, и формировать html,не выводит.

laimas 01.05.2016 16:11

А зачем так передавать, лучше в JSON формате, хотя и эту полученную строку можно разбить по пробелу на массив:

data = data.split(' ');


но должна быть гарантия того, что пробел между именами один, до и после строки нет пробелов, иначе при формировании изображений проверять не пустое ли значение.

ureech 01.05.2016 16:22

Пробовал, не работает.Не превращает в массив.

laimas 01.05.2016 16:32

Цитата:

Сообщение от ureech
Пробовал, не работает.

Интересно как?

var s = '1dfe4f3626dbce88db21157698e59009.jpg 2096a1c62e80c92fe47bb3e9b1618e77.jpg 394d20c2475c9529607fbe5fc7acd33a.jpg 4040d526d29405cb7d2e6b6ca7ace790.jpg 7e4082367c2ea4c26d556ad1afaf38ff.jpg 9481a0a7ff9742548f71ba3656c9a668.jpg a05e7aafcbef351885a8789d55aa078d.jpg b3c7778c6dab5ee7455deaec13d9c0b6.jpg f9b13106b167d7c17afe9fd94352001b.jpg'; 

alert(s.split(' ')[3])


Да и строка, это не лучшее в данном случае. Во-первых где пути? Если путь у всех общий и известен, то нет проблем, а если нет? Или путь есть понятие динамическое? А гарантия, что все загрузились?

Ведь лучше же возвращать в JSON:

data = {
    "msg"  : //сообщение сервера по итогам
    "path" : "path", //общий путь загруженных
    "ims"   : ["1dfe4f3626dbce88db21157698e59009.jpg", "2096a1c62e80c92fe47bb3e9b1618e77.jpg", ...], //успешно загруженные
    "error" : //ошибки при загрузке и оригинальные имена не загруженных файлов
    /// и т.д. и т.п....   
}

ureech 01.05.2016 16:45

Цитата:

Сообщение от laimas
Интересно как?

Так и пробовал.Всё равно строка,длинющая.
С путями и всем прочим порядок.
Цитата:

Сообщение от laimas
Ведь лучше же возвращать в JSON:

Согласен,но написанное вами мне не понятно.Как это получается?
И мне надо только имена файлов.Всё остальное готово и ждёт.:)


Часовой пояс GMT +3, время: 20:24.