2015-03-23 8 views
0

Я пытаюсь сделать запрос AJAX отправить файл в мой контроллер, который затем должен продолжить считывание отправленного файла и вернуть отсортированный массив обратно в интерфейс, хотя это не работает, поскольку я застрял на ошибке «blob», не установленной. Я искал, но не нашел ответа, который я искал, поэтому я задаю этот вопрос.Отправка файла через AJAX возвращает ошибку «blob»

В настоящее время я получаю следующее TypeError:

'slice' called on an object that does not implement interface Blob.

Данные, которые я пытаюсь отправить выглядит следующим образом:

http://piclair.com/qk8ms (рис, потому что я не могу скопировать данные непосредственно из браузера)

JavaScript:.

// Click handler for file read 
$(document).on('click','#load-csv-btn',function(e){ 
    e.preventDefault(); 
    var file = $('#file_upload')[0].files; 
    console.log(file); 

    readCSV(file); 
}); 


function readCSV(file){ 
    $.ajax({ 
     type: "POST", 
     url: "ajax/read.php", 
     data: {file: file}, 
     contentType: false 
    }).success(function(data){ 
     console.log(data); 
    }).fail(function(){ 
     console.log('error'); 
    }); 
} 

Обработчик PHP, хотя я думаю, что часть является своего рода несоответствующими для данной проблемы:

<?php 
    var_dump($_POST); 

Я нашел кого-то говорил, что установка processData: false и contentType: false позволил бы сценарий игнорировать блоб Requirment, но если я устанавливаю эти параметры мой сервер просто отправляет обратно пустой массив, который, я думаю, не является сюрпризом, поскольку я не обрабатываю какие-либо данные.

Так что я надеюсь, что кто-то знает решение этой проблемы и сможет мне помочь.

EDIT:

Просто ясно, какой метод я попробовал, что возвращает пустой массив, здесь альтернативный код:

$(document).on('click','#load-csv-btn',function(e){ 
    e.preventDefault(); 
    var file = $('#file_upload')[0].files[0]; 
    var fd = new FormData(); 
    fd.append("csv",file); 

    readCSV(fd); 
}); 


function readCSV(file){ 
    $.ajax({ 
     type: "POST", 
     url: "ajax/read.php", 
     data: {file: file}, 
     contentType: false, 
     processData: false 
    }).success(function(data){ 
     console.log(data); 
    }).fail(function(){ 
     console.log('error'); 
    }); 
} 
+0

Проверьте http://stackoverflow.com/questions/19722920/submitting-a-file-with-jquery-ajax-gives-typeerror –

+0

@ jQuery.PHP.Magento.com Я пробовал этот метод, но он отправляет назад пустой массив, как описано в моем сообщении. 'var_dump ($ _ REQUEST)' и 'var_dump ($ _ POST)' оба делают. –

+0

@entiendoNull Спасибо, я постараюсь следовать этому учебнику и посмотреть, работает ли он. Я дам обновление, как только попробую. –

ответ

2

Насколько я обеспокоен загрузки AJAX являются нелегко сделать без внешних библиотек. По крайней мере, это то, чему я научился в первый раз, когда мне это нужно.

http://www.9lessons.info/2011/08/ajax-image-upload-without-refreshing.html

Это руководство довольно хорошо, но немного устарели, если вы используете более новую версию JQuery. Возможно, вам придется изменить некоторые устаревшие функции, такие как (.live() - .on()).

В конце концов, я могу порекомендовать его в качестве хорошего старта. Я использовал его широко в течение многих лет и с большим успехом.

Удачи вам!

Смежные вопросы