Uncaught TypeError: URL.createObjectURL: аргумент 1 недопустим ни для одной из перегрузок с 1 аргументом.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Uncaught TypeError: URL.createObjectURL: аргумент 1 недопустим ни для одной из перегрузок с 1 аргументом.

Сообщение Anonymous »

Я пытаюсь предоставить администраторам возможность загрузки CSV при нажатии кнопки. Вызов ajax, используемый для этого, запускается кнопкой на панели администратора Wordpress. Что касается AJAX-части, я в основном скопировал код из ответа Джонатана Аменда на этот вопрос. Сделав несколько корректировок и настроив серверную часть, я попытался загрузить csv-файл. Окно загрузки не появляется, а в консоли написано:

Код: Выделить всё

Uncaught TypeError: URL.createObjectURL: Argument 1 is not valid for any of the 1-argument overloads.
Аргумент 1 может означать только большой двоичный объект, который отправляется со стороны сервера. В документации для URL.createObjectURL указано:

объект:
Объект File, Blob или MediaSource, для которого нужно создать URL-адрес объекта.

В совокупности это может означать только то, что данные blob, полученные с сервера, имеют неверный формат. Когда я регистрирую BLOB-объект типа на консоли, он говорит "строка".
Это часть кода, используемого на стороне сервера:

Код: Выделить всё

    // Reading arguments, sanitize and validate data
// Query database and store in $results (as assoc_array)
$delimiter = ";";
$file = fopen("php://output","w");

$cols_printed = false;
foreach($results as $row) {

if (!$cols_printed){

// FPUT 1: Write Aliases of query to file once
fputcsv($file, array_keys($row), $delimiter);
$cols_printed = true;
}

// FPUT 2: Write values to file
fputcsv($file, array_values($row), $delimiter);
}
// Close file, sending headers
Если я закомментирую FPUT 2, то CSV-файл можно будет загрузить (конечно, только с именами столбцов и без данных). Тип BLOB-объекта изменится на "object".
Я попробовал преобразовать весь BLOB-объект явно перед вызовом URL.createObjectURL в JS, что позволило мне успешно загрузить файл без ошибок, но самих строк нигде не было видно. Так чем же отличается второй FPUT?
РЕДАКТИРОВАТЬ 1: Я провел дополнительное тестирование. Если я удалю FPUT1 из оператора if, он выдаст ту же ошибку. В сценарии .php нет других var_dump, print_r или echo, которые могли бы выдать такой вывод. Даже если добавить echo «test»; в самом конце этого файла, две новые строки все равно появятся после него. Я мог бы исправить это, переместив весь код в основной файл плагина.php. Однако клиент по-прежнему воспринимает ответ как строку, несмотря на то, что мой SELECT изменен на один столбец INT.

Подробнее здесь: https://stackoverflow.com/questions/646 ... any-of-the
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»