Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   getFormData и отправка изображений через ajax (https://javascript.ru/forum/jquery/30404-getformdata-i-otpravka-izobrazhenijj-cherez-ajax.html)

ksevelyar 03.08.2012 03:57

getFormData и отправка изображений через ajax
 
Есть форма:

Код:

<form accept-charset="UTF-8" action="/foobar/images" class="new_image" data-remote="true" enctype="multipart/form-data" id="new_image" method="post">
<div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="o8e15OqFzi/PYcWfzwpoBZb4YMHJ3JZ+2TU9Id/afi8=" /></div>
  <p>
    <label for="image_name">Name</label>
    <br>
    <input id="image_name" name="image[name]" size="30" type="text" />
  </p>
  <p>
    <input id="image_image" name="image[image]" type="file" />
  </p>
  <p>
    <input name="commit" type="submit" value="Create Image" />
  </p>
</form>

И такой простенький код, для отправки изображения через ajax:

function upload(file) {

  var formdata = new FormData();
  formdata.append("image[name]", "Foooobar");
  formdata.append("image[image]", file);
  var xhr = new XMLHttpRequest();
  xhr.open("POST", "images");
  xhr.send(formdata);
}

$('#image_image').change(function()
{
  upload(this.files[0]);
});


Он работает и загружает изображение.

Но когда я пытаюсь сделать так:

$('#image_image').change(function()
{
  var formElement = document.getElementById("new_image");
  var xhr = new XMLHttpRequest();
  xhr.open("POST", "images");
  xhr.send(formElement.getFormData());
});


То вижу ошибку в Файрбаге:

Код:

TypeError: formElement.getFormData is not a function
[Break On This Error]       

xhr.send(formElement.getFormData());

Что я делаю не так? Почему js ругается на эту функцию?

cmd 03.08.2012 11:13

Не могу понять, а где этот самый id="image_new"?

ksevelyar 03.08.2012 13:20

Пардон, когда переносил сюда код — опечатался. Везде "new_image".

ksevelyar 03.08.2012 14:09

$('#image_image').change(function()
{
  form=document.getElementById('new_image')
  data=new FormData(form)
  var xhr = new XMLHttpRequest();
  xhr.open("POST", "images");
  xhr.send(data);
});


Так работает.

vadim5june 03.08.2012 14:31

А что за метод getFormData?

ksevelyar 03.08.2012 14:34

Цитата:

Сообщение от vadim5june (Сообщение 194302)
А что за метод getFormData?

https://hacks.mozilla.org/2010/05/fo...ng-to-firefox/

vadim5june 03.08.2012 14:43

так он только в мозилле работает
а alert(formElement.getFormData) выдает функцию?
по ошибке как будто бы этот метод не определен
formElement.getFormData is not a function

ksevelyar 03.08.2012 14:54

Уже не важно, data=new FormData(form) работает как нужно :)


Часовой пояс GMT +3, время: 19:30.