Доступ к функции возникает из другого Jquery - PullRequest
0 голосов
/ 14 июля 2020

надеюсь, что кто-то может помочь со следующим.

У меня есть функция, которая считывает данные изображения из базы данных и возвращает URL-адрес объекта для отображения в зависимости от типа изображения / файла.

function newFile(data) {
//example image j -> jpg image type
 if ('j'.search(imgType) >= 0)
  {
     var d = imgData;
     data = new Uint8Array(d.length / 2);
     for (var i = 0; i < d.length; i += 2)
     data[i/2] = parseInt(d.substr(i, 2), 16);
     mime_type = 'image/jpeg';
  } 
  //example image s -> svg image type
 if ('s'.search(imgType) >= 0)
  { 
    var d = imgData;
    mime_type = 'image/svg+xml';
  } 
    url = window.URL.createObjectURL(new Blob([data], { type: mime_type }));
}

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

$('.preview').click(function(){
$.ajax({
  url: "/images.php",
  data: { id: "imageId"},
  type: 'post',
  dataType: 'json',
  success: function(ids){
    {
      for (var i = 0; i < ids.length; ++i)
      {
        var k = ids[i].result[0];
        if (k.imgType = 'j')) //jpg
        {
          //go to newFile function where k.imgType = j return image blob url
          $('previewer').html("<img src="'url'">");
        }
      }
    }
  }
});

});

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Примерно так

Кстати, ваш код был беспорядочным. Повсюду отсутствуют скобки.

Также, если есть более одного изображения (вы ДЕЛАЕТЕ l oop), вам нужно добавить

Я не могу гарантировать, что приведенный ниже код работает, но он ближе, чем было

const mimeTypes = {
  'j': 'image/jpeg',
  's': 'image/svg+xml'
}
// not tested but cleaned up
function newFile(imgData, imgType) {
  const data = new Uint8Array(imgData.length / 2);
  for (let i = 0; i < imgData.length; i += 2) {
    data[i / 2] = parseInt(imgData.substr(i, 2), 16);
  }
  return window.URL.createObjectURL(new Blob([data], {
    type: mimeTypes[imgType]
  }));
}

$('.preview').on("click", function() {
  $.ajax({
    url: "/images.php",
    data: {
      id: "imageId"
    },
    type: 'post',
    dataType: 'json',
    success: function(ids) {
      for (var i = 0; i < ids.length; ++i) {
        const k = ids[i].result[0];
        $('previewer').append('<img src="data:' + mimeTypes[k.imgType] + ';' + newFile(k.imgData, k.imgType + '">')
      }
    }
  });
});
0 голосов
/ 14 июля 2020

Функция должна заканчиваться на return url;.

Затем вы можете вызвать ее из функции AJAX success.

$('previewer').html(`<img src='" + newFile(k) + "'>");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...