Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: FileReader JS синхронно
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » FileReader JS синхронно

Страниц (1): [1]
 

1. 3d_killer - 25 Июня, 2016 - 20:19:18 - перейти к сообщению
Кусок кода читает и отображает в браузере
CODE (javascript):
скопировать код в буфер обмена
  1. var files=el[0].files;
  2. var count=files.length;
  3. for(var i=0; i<count;i++)
  4.         {
  5.                 var reader = new FileReader();
  6.                 reader.onload = function(e)
  7.                         {              
  8.                                 element.children('img').attr('src', e.target.result);  
  9.                         }
  10. reader.readAsDataURL(files[i]);
  11.         }

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

Долго до этого доходил и в итоге понял порядок отображения зависит от того что первее загрузится, следовательно надо ожидать загрузки изображения перед загрузкой следующего, то есть делать синхронно, но как это сделать перерыл инет, но увы так и не нашел
2. Viper - 25 Июня, 2016 - 20:55:42 - перейти к сообщению
3. 3d_killer - 25 Июня, 2016 - 21:18:45 - перейти к сообщению
наверно все же не правильно, проблема заключается вот в чем:
массив файлов при загрузке нумеруется
например [0]=>1.jpg [1]=>2.jpg [2]=>3.jpg

я делаю предпросмотр и там выделяю область на всех картинках, но проблема в том что нумерация этих областей не совпадает с нусерацией файлов, ключи не соответствуют, после танцев с бубном я понял что очередность файлов в предпросмотре идет какой быстрее отразился поэтому и ищу как бы сделать синхроно дабы совпал порядок, скрин для примера
(Добавление)
получаемый массив для примера:
PHP:
скопировать код в буфер обмена
  1.  
  2. array(15) {
  3.   ["watermark"]=>
  4.   string(2) "on"
  5.   ["trumb"]=>
  6.   string(2) "on"
  7.   ["trumb_width"]=>
  8.   string(3) "200"
  9.   ["trumb_height"]=>
  10.   string(3) "200"
  11.   ["x1"]=>
  12.   array(2) {
  13.     [0]=>
  14.     string(2) "27"
  15.     [1]=>
  16.     string(1) "0"
  17.   }
  18.   ["x2"]=>
  19.   array(2) {
  20.     [0]=>
  21.     string(3) "423"
  22.     [1]=>
  23.     string(2) "44"
  24.   }
  25.   ["y1"]=>
  26.   array(2) {
  27.     [0]=>
  28.     string(3) "303"
  29.     [1]=>
  30.     string(1) "0"
  31.   }
  32.   ["y2"]=>
  33.   array(2) {
  34.     [0]=>
  35.     string(3) "699"
  36.     [1]=>
  37.     string(2) "44"
  38.   }
  39.   ["ho"]=>
  40.   array(2) {
  41.     [0]=>
  42.     string(3) "396"
  43.     [1]=>
  44.     string(2) "44"
  45.   }
  46.   ["wo"]=>
  47.   array(2) {
  48.     [0]=>
  49.     string(3) "396"
  50.     [1]=>
  51.     string(2) "44"
  52.   }
  53.   ["h"]=>
  54.   array(2) {
  55.     [0]=>
  56.     string(3) "927"
  57.     [1]=>
  58.     string(3) "660"
  59.   }
  60.   ["w"]=>
  61.   array(2) {
  62.     [0]=>
  63.     string(3) "450"
  64.     [1]=>
  65.     string(3) "450"
  66.   }
  67.   ["name_en"]=>
  68.   string(14) "site_page_load"
  69.   ["operation"]=>
  70.   string(12) "upload_files"
  71.   ["id"]=>
  72.   string(1) "1"
  73. }
  74. array(5) {
  75.   ["name"]=>
  76.   array(2) {
  77.     [0]=>
  78.     string(23) "2016-06-25_21-18-39.jpg"
  79.     [1]=>
  80.     string(18) "новости.jpg"
  81.   }
  82.   ["type"]=>
  83.   array(2) {
  84.     [0]=>
  85.     string(10) "image/jpeg"
  86.     [1]=>
  87.     string(10) "image/jpeg"
  88.   }
  89.   ["tmp_name"]=>
  90.   array(2) {
  91.     [0]=>
  92.     string(39) "G:\OpenServer\userdata\temp\php61FE.tmp"
  93.     [1]=>
  94.     string(39) "G:\OpenServer\userdata\temp\php620F.tmp"
  95.   }
  96.   ["error"]=>
  97.   array(2) {
  98.     [0]=>
  99.     int(0)
  100.     [1]=>
  101.     int(0)
  102.   }
  103.   ["size"]=>
  104.   array(2) {
  105.     [0]=>
  106.     int(107030)
  107.     [1]=>
  108.     int(942072)
  109.   }
  110. }
  111.  

в многомерных типо
["h"]=>
array(2) {
[0]=>
string(3) "927"
[1]=>
string(3) "660"
ключи должны стоять наоборот, если файлов больше то они могут вобще хаотично распологаться, вот как это победить.

может конечно потому что reader.onload = function(e){ одна функция по завершению загрузки, а эта reader.readAsDataURL(files[i]); идет отдельно то есть выполняется сразу, пробовал переставлять она вобще работать перестает
4. 3d_killer - 26 Июня, 2016 - 00:19:55 - перейти к сообщению
все победил, через each перебор и принудительно расставлять ключи

 

Powered by ExBB FM 1.0 RC1