Подскажите, отправляю файл на сервер методом Ajax, указываю dataType: 'text', данные с файла пишу в БД, возвращаю клиенту массив, который надо выкинуть на странице, из-за того что в место dataType: 'json' использую dataType: 'text' т.к. отправляю файл, обратно приходит строка в другой кодировке, что-то не получается строку преобразовать в объект и сменить кодировку. Использую var arr = data.split(', '); decodeURIComponent(arr); Подскажите как правильно сделать или куда копать?
Отправляю на сервер: Код (Javascript): $.ajax({ type: 'POST', dataType: 'text', cache: false, contentType: false, processData: false, url: "../partners/dowload_price_list_partns.php", data: form_data, success: function(data){ ...
так что вернет: Код (Javascript): $.post( "../partners/dowload_price_list_partns.php", form_data) .done(function(data) { console.log(data); });
вот так если на что ругается: Код (Javascript): $.post( "../partners/dowload_price_list_partns.php", form_data) .done(function(data) { console.log(data); }) .fail(function(jqXHR) { console.log(jqXHR.responseText); });
вот такой код выше ajax идет: Код (Javascript): var file_data = $(nameInput).prop('files')[0]; var form_data = new FormData(); form_data.append(nameFile, file_data); --- Добавлено --- jquery-3.3.1 --- Добавлено --- ругается на строку: Код (Javascript): $.post( "../partners/dowload_price_list_partns.php", form_data) TypeError: 'append' called on an object that does not implement interface FormData.
покажите строку которая возвращается. Как она выглядит хоть. А на будущее не нужен здесь jquery. Вот простая функция, прекрасно отправляет формы: Код (Javascript): function formAjax(url, form, success) { var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); xhr.open('POST', url); xhr.onreadystatechange = function() { if (xhr.readyState>3 && xhr.status==200) { success(xhr.responseText); } if (xhr.status==500) { console.log(xhr.responseText); } }; xhr.setRequestHeader('X-CSRF-Token', token); xhr.send(form); return xhr; } использовать в вашем случае можно так: Код (Javascript): formAjax('../partners/dowload_price_list_partns.php', form_data, function(data){ var json = JSON.parse(data); console.log(json); });
[{"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! ...
Код (Javascript): var json = JSON.parse(data); console.log(json); --- Добавлено --- функцию вставить забыл Код (Javascript): function formAjax(url, form, success) { var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); xhr.open('POST', url); xhr.onreadystatechange = function() { if (xhr.readyState>3 && xhr.status==200) { success(xhr.responseText); } if (xhr.status==500) { console.log(xhr.responseText); } }; xhr.setRequestHeader('X-CSRF-Token', token); xhr.send(form); return xhr; }
понял что пропустил её), в общем сейчас спотыкается, не может определить токен Код (Javascript): xhr.setRequestHeader('X-CSRF-Token', token);
в общем ему теперь не нравится JSON.parse(data) строка. неожиданный непробельный символ после данных JSON в строке 1 столбца 4576 данных JSON --- Добавлено --- Плюс еще и ругается на if (xhr.readyState>3 && xhr.status==200) { success(xhr.responseText); } тоже самое пишет
так тоже ругается?: Код (Javascript): $.ajax({ type: 'POST', dataType: 'text', cache: false, contentType: false, processData: false, url: "../partners/dowload_price_list_partns.php", data: form_data, success: function(data){ var json = JSON.parse(data); console.log(json); } }) --- Добавлено --- я у себя проверил то что вы мне прислали: Код (Javascript): 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"}]'; var json = JSON.parse(test2); мне вышел такой ответ: "Внимание! Код продукта в А+ не найдет(отсутсвует) в таблице соответсвия, на строке:. 2. Блок питания Qori 450CG 233"
PHP: $result = DowloadXls::exportPriceList('dowloadPrice'); $resData['result'] = $result; echo json_encode($resData);
а если просто: PHP: $result = DowloadXls::exportPriceList('dowloadPrice'); echo json_encode($result); что придет?
В общем в файле он находил еще данные и добавлял их в массив для передачи клиенту, добавил временно PHP: exit; после PHP: echo json_encode($resData); Перепишу файл чтобы все было по человечески) Вопрос закрыт. Благодарю!