2013-03-19 3 views
0

Я разрабатываю CakePHP и изначально думал, что эта проблема связана с Cake; это не так. Я снова написал вопрос, чтобы сделать ответ, который я получил более широкое применениеJQuery1.8.0: Отправка файлов из форм через AJAX

У меня есть форма

<form action""> 
     <fieldset> 
     <!---- bunch of fields-----> 
     <input type="file" name="data[Upload][file]" id="UploadFile"> 
     <button id="ajaxUploadSubmit"> Submit </button> 
     </fieldset> 
    </form> 

И представить функцию я написал как выглядит:

$("#ajaxUploadSubmit").click(function() { 
       $.ajax({ 
        url:"uploads/add", 
        data: $("#UploadsAddForm").serialize() 
       }).done(function(responseText) { 
        alert(responseText); 
        }) 
       .fail(function() { 
        alert('failxors'); 
        }) 
       }); 

Но эта строка возвращает пустой массив: $this->request->data.

ответ

0

Я только добавляю этот ответ, поэтому этот вопрос можно отметить как ответ; на самом деле thaJeztah ответил на это в третьем комментарии ответа Jai: проблема в этом случае заключалась в том, что я должен был использовать FormData() вместо Serialize(), как показано здесь: how to do file upload using jquery serialization

0

Я думаю, что вы не останавливая форму для отправки:

$("#ajaxUploadSubmit").click(function(e) { 
     e.preventDefault(); 

Вместо того, чтобы click попробовать submit:

пытаются это изменить:

$("#ajaxUploadSubmit").click(function() { 

к этому:

$(".form").submit(function(e) { 
    e.preventDefault(); 
+0

Увы, вы правы о действии по умолчанию; в коде, который я опубликовал, я оставил этот флаг, но на самом деле (т. е. мой живой код), который уже был адресован (с CakePHP вы можете остановить активность формы по умолчанию из 'Form-> create()', используя ' 'default' => false'. – Jonline

+0

Кроме того, представление * * происходит, проблема в том, что данные в форме не отправляются вместе с ним, и я подозреваю, что это имеет какое-то отношение к тому, как CakePHP хочет получать данные (т. е. систему маршрутизации торта) в отличие от того, как Jquery отправляет ее, но я недостаточно знаком с соглашениями Cake или JSON (что в основном я считаю, что JQuery создает свои вызовы AJAX с ...?) до выяснить, в чем дело: – Jonline

+2

Прежде всего, вы пытались отладить данные в браузере? Или путем проверки запроса, отправленного на сервер в FireBug (или Chrome WebInspector), и отладки 'console.log ($ (" # UploadsAddForm ") .serialize());'. Также отправка этой формы не будет работать так, потому что jQuery.serialize() ** не отправляет файлы-загрузки ** http://stackoverflow.com/questions/4545081/how-do-to-file-upload-using-jquery-serialization есть несколько плагинов, которые используют API загрузки файлов HTML5 что может работать также – thaJeztah

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