За последние 24 часа нас посетили 22785 программистов и 1253 робота. Сейчас ищут 806 программистов ...

отправка файла на сервер методом Ajax и получение массива обратно

Тема в разделе "JavaScript и AJAX", создана пользователем AlexsaiL, 13 июн 2019.

  1. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    Подскажите, отправляю файл на сервер методом Ajax, указываю dataType: 'text', данные с файла пишу в БД, возвращаю клиенту массив, который надо выкинуть на странице, из-за того что в место dataType: 'json' использую dataType: 'text' т.к. отправляю файл, обратно приходит строка в другой кодировке, что-то не получается строку преобразовать в объект и сменить кодировку.
    Использую var arr = data.split(', ');
    decodeURIComponent(arr);
    Подскажите как правильно сделать или куда копать?
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    покажите код где отправляете
     
  3. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    Отправляю на сервер:
    Код (Javascript):
    1. $.ajax({
    2.         type: 'POST',
    3.     dataType: 'text',
    4.     cache: false,
    5.     contentType: false,
    6.     processData: false,
    7.         url: "../partners/dowload_price_list_partns.php",
    8.         data: form_data,
    9.         success:  function(data){ ...
     
  4. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    так что вернет:
    Код (Javascript):
    1. $.post( "../partners/dowload_price_list_partns.php", form_data)
    2.   .done(function(data) {
    3.     console.log(data);
    4.   });
     
  5. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    Ничего не вернул
     
  6. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    версия jquery какая?
    --- Добавлено ---
    даже не ругается в консоли?
     
  7. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    не ругается
     
  8. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    вот так если на что ругается:
    Код (Javascript):
    1. $.post( "../partners/dowload_price_list_partns.php", form_data)
    2.   .done(function(data) {
    3.     console.log(data);
    4.   })
    5.  .fail(function(jqXHR) {
    6.      console.log(jqXHR.responseText);
    7.   });
     
  9. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    вот такой код выше ajax идет:
    Код (Javascript):
    1.         var file_data = $(nameInput).prop('files')[0];
    2.     var form_data = new FormData();
    3.  
    4.         form_data.append(nameFile, file_data);
    --- Добавлено ---
    jquery-3.3.1
    --- Добавлено ---
    ругается на строку:
    Код (Javascript):
    1. $.post( "../partners/dowload_price_list_partns.php", form_data)
    TypeError: 'append' called on an object that does not implement interface FormData.
     
  10. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    покажите строку которая возвращается. Как она выглядит хоть. А на будущее не нужен здесь jquery. Вот простая функция, прекрасно отправляет формы:
    Код (Javascript):
    1. function formAjax(url, form, success) {
    2.     var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    3.     xhr.open('POST', url);
    4.     xhr.onreadystatechange = function() {
    5.         if (xhr.readyState>3 && xhr.status==200) { success(xhr.responseText); }
    6.         if (xhr.status==500) { console.log(xhr.responseText); }
    7.     };
    8.     xhr.setRequestHeader('X-CSRF-Token', token);
    9.     xhr.send(form);
    10.     return xhr;
    11. }
    использовать в вашем случае можно так:
    Код (Javascript):
    1. formAjax('../partners/dowload_price_list_partns.php', form_data, function(data){
    2.        var json = JSON.parse(data);
    3.        console.log(json);
    4. });
     
  11. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    [{"error_description":"\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435! \u041a\u043e\u0434 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u0432 \u0410+ \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u0442(\u043e\u0442\u0441\u0443\u0442\u0441\u0432\u0443\u0435\u0442) \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0432\u0438\u044f, \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435:. 2. \u0411\u043b\u043e\u043a \u043f\u0438\u0442\u0430\u043d\u0438\u044f Qori 450CG 233"},{"error_description":"\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435! ...
     
  12. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    это у вас изначально возвращается или после изменений?
     
  13. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    изначально
    --- Добавлено ---
    сейчас ругается, ReferenceError: formAjax is not defined
     
  14. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Код (Javascript):
    1. var json = JSON.parse(data);
    2. console.log(json);
    --- Добавлено ---
    функцию вставить забыл
    Код (Javascript):
    1. function formAjax(url, form, success) {
    2.     var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    3.     xhr.open('POST', url);
    4.     xhr.onreadystatechange = function() {
    5.         if (xhr.readyState>3 && xhr.status==200) { success(xhr.responseText); }
    6.         if (xhr.status==500) { console.log(xhr.responseText); }
    7.     };
    8.     xhr.setRequestHeader('X-CSRF-Token', token);
    9.     xhr.send(form);
    10.     return xhr;
    11. }
     
  15. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    понял что пропустил её), в общем сейчас спотыкается, не может определить токен
    Код (Javascript):
    1.  xhr.setRequestHeader('X-CSRF-Token', token);
     
  16. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    ой, удали эту строчку =)
     
  17. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    в общем ему теперь не нравится JSON.parse(data) строка.
    неожиданный непробельный символ после данных JSON в строке 1 столбца 4576 данных JSON
    --- Добавлено ---
    Плюс еще и ругается на if (xhr.readyState>3 && xhr.status==200) { success(xhr.responseText); } тоже самое пишет
     
  18. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    так тоже ругается?:
    Код (Javascript):
    1. $.ajax({
    2.     type: 'POST',
    3.     dataType: 'text',
    4.     cache: false,
    5.     contentType: false,
    6.     processData: false,
    7.     url: "../partners/dowload_price_list_partns.php",
    8.     data: form_data,
    9.     success:  function(data){
    10.           var json = JSON.parse(data);
    11.           console.log(json);
    12.    }
    13. })
    --- Добавлено ---
    я у себя проверил то что вы мне прислали:
    Код (Javascript):
    1. var test2 = '[{"error_description":"\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435! \u041a\u043e\u0434 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u0432 \u0410+ \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u0442(\u043e\u0442\u0441\u0443\u0442\u0441\u0432\u0443\u0435\u0442) \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0432\u0438\u044f, \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435:. 2. \u0411\u043b\u043e\u043a \u043f\u0438\u0442\u0430\u043d\u0438\u044f Qori 450CG 233"}]';
    2. var json = JSON.parse(test2);
    мне вышел такой ответ:
    "Внимание! Код продукта в А+ не найдет(отсутсвует) в таблице соответсвия, на строке:. 2. Блок питания Qori 450CG 233"
     
  19. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    Да, снова на json.parse() строку
     
  20. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    давайте перейдем к php. Как вы формируете ваш массив, покажите код.
     
  21. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    PHP:
    1.         $result = DowloadXls::exportPriceList('dowloadPrice');
    2.         $resData['result'] = $result;
    3.         echo json_encode($resData);
     
  22. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    а если просто:
    PHP:
    1. $result = DowloadXls::exportPriceList('dowloadPrice');
    2. echo json_encode($result);
    что придет?
     
  23. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    пробовал на прямую, тоже самое, ругается.
     
  24. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    пришли мне в личку что до этого присылал, только полностью:
     
    AlexsaiL нравится это.
  25. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    В общем в файле он находил еще данные и добавлял их в массив для передачи клиенту, добавил временно
    PHP:
    после
    PHP:
    1. echo json_encode($resData);
    Перепишу файл чтобы все было по человечески) Вопрос закрыт. Благодарю!:):cool: