Автор Тема: Загрузка файла через Ajax  (Прочитано 253 раз)

30 Сентябрь 2021, 21:57:01
  • Старожил
  • ****
  • Сообщений: 259
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте
Пытаюсь "подружиться" с Ajax
По образцу и подобию всегда делал так:
var admLink = "index.php?controller="+controller+"&token="+token;
$.ajax({
type: 'POST',
url: admLink,
cache: false,
dataType: 'json',
data : {
ajax: 1,
action: 'GetList'
},
success : function(data)
теперь понадобилось загружать файл с компьютера. Во всех примерах в инете применяется конструкция такого типа:
$.ajax({
type: "POST",
url: '/upload.php',
cache: false,
contentType: false,
processData: false,
data: formData,
dataType : 'json',
success: function(msg){
formData я формирую, но "скрестить" две конструкции data
data : {
ajax: 1,
action: 'GetList'
},

и

data: formData,
никак не могу.
Прошу помощи.
Спасибо.
01 Октябрь 2021, 09:23:32
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Prestashop какой версии?
Загрузка файла в модуле или добавили/изменили контоллер?
01 Октябрь 2021, 10:06:56
Ответ #2
  • Старожил
  • ****
  • Сообщений: 259
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Prestashop какой версии?
Загрузка файла в модуле или добавили/изменили контоллер?
Версия 1.6, контроллер новый
01 Октябрь 2021, 11:51:31
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 1285
  • Репутация: +13/-1
  • Сообщество PrestaShop
    • Просмотр профиля
$.ajax({
...
data : {
ajax : true,
ajax1 : var1,
ajax2 : var2,
                // ...,
action : getMyList,
},
success : function (result) {
// your action code on result
}
});
В контроллере все зависит от того где используется метод.
Для Admin Controller prefix ajaxProcesss.
Для Front Controller prefix displayAjax.
Пример для админ контроллера:
public function ajaxProcessGetMyList()
{
    var1 = Tools::getValue('ajax1');
    var2 = Tools::getValue(ajax2');
        // .....
    // your action code ....
}
01 Октябрь 2021, 12:01:43
Ответ #4
  • Старожил
  • ****
  • Сообщений: 259
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В контроллере все зависит от того где используется метод.
С этим проблем нет, вопрос о том, как в Ajax "запихнуть" formData:
если ставлю как в примерах 
data: formData,то куда ставить
action : getMyList,
01 Октябрь 2021, 12:28:39
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 1285
  • Репутация: +13/-1
  • Сообщество PrestaShop
    • Просмотр профиля
В контроллере определить нужно массив.
01 Октябрь 2021, 12:41:26
Ответ #6
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Файл js или js функции покажите, там где вы описываете событие клика по кнопке загрузки.
$('#myBtn').click(function(e) {
        e.preventDefault();
        ....
        var formData = new FormData();
        ....
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
01 Октябрь 2021, 16:06:18
Ответ #7
  • Старожил
  • ****
  • Сообщений: 259
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Файл js или js функции покажите, там где вы описываете событие клика по кнопке загрузки.


<input type="file" id="bank-js-file">
 
<div id="result">
<!-- Результат-->
</div>
$(document).on('change', '#bank-js-file', function(e){
if (window.FormData === undefined) {
alert('В вашем браузере FormData не поддерживается')
} else {
var formData = new FormData();
formData.append('file', $("#bank-js-file")[0].files[0]);
const url = window.location.search;
const urlParams = new URLSearchParams(url);
var token = urlParams.get('token');
var controller = urlParams.get('controller');
var admLink = "index.php?controller="+controller+"&token="+token;
$.ajax({
type: "POST",
url: admLink,
ajax: 1,
cache: false,
data :formData,
action: 'GetList',
dataType : 'json',
success: function(msg){
if (msg.error == '') {
$("#bank-js-file").hide();
$('#result').html(msg.success);
} else {
$('#result').html(msg.error);
}
}
});
}
});
я не понимаю как сформировать параметра data, совместив и formData, и action=...

Ну и соответственно, не зная как будет сформировано, не знаю как  потом получить файл в контроллере. Не сам Ajax-запрос, а файл из запроса.