Nasıl FormData nesneleri göndermek için jQuery Ajax istekleri ile?
XMLHttpRequest Level 2 standart (hala bir çalışma taslağı) FormData
arabirim tanımlar. Bu arayüz XHR istekleri (Ajax-istekleri) File
nesneleri ekleme sağlar.
Btw, bu yeni bir özellik - geçmişte, "-iframe-gizli numara" (my other question bunu okuyun) kullanılır.
Bu işler böyle olur (örnek):
var xhr = new XMLHttpRequest(),
fd = new FormData();
fd.append( 'file', input.files[0] );
xhr.open( 'POST', 'http://example.com/script.php', true );
xhr.onreadystatechange = handler;
xhr.send( fd );
input
<input type="file">
alan ve handler
Ajax isteği başarı işleyicisi.
Bu tüm tarayıcılarda güzel (yine hariç YANİ) çalışıyor.
Şimdi dil eklentisi ile bu işlevi çalışma yapmak istiyorum. Bunu denedim:
var fd = new FormData();
fd.append( 'file', input.files[0] );
$.post( 'http://example.com/script.php', fd, handler );
Ne yazık ki, işe yaramaz ("Yasadışı çağırma" hata - screenshot is here atılır). Bir WordPress kullanmak anahtar-değer nesnesi basit bir form alan adları / değerleri temsil beklediğini varsayıyorum, ve geçerken olduğumu FormData
örnek görünüşte uyumsuz.
xhr.send()
, FormData
bir örneği aktarmak mümkün olduğundan, aynı zamanda jQuery ile iş yapmak olduğunu umarım.
Güncelleme:
""JQuery Bug Tracker üzerinde. özellik bileti yarattım Burada: http://bugs.jquery.com/ticket/9995
Bir kullanılması tavsiye ettim""... . Ajax ön filtre
Güncelleme:
İlk olarak, bana bir demo ulaşmak istediğim gösteren vereyim.
HTML:
<form>
<input type="file" id="file" name="file">
<input type="submit">
</form>
JavaScript:
$( 'form' ).submit(function ( e ) {
var data, xhr;
data = new FormData();
data.append( 'file', $( '#file' )[0].files[0] );
xhr = new XMLHttpRequest();
xhr.open( 'POST', 'http://hacheck.tel.fer.hr/xml.pl', true );
xhr.onreadystatechange = function ( response ) {};
xhr.send( data );
e.preventDefault();
});
Bu yukarıdaki kod sonuç-istek, HTTP:
Buna ne gerek var- Form-data "içerik-türü!/" parçalı istiyorum
Önerilen çözüm gibi olacaktır:
$( 'form' ).submit(function ( e ) {
var data;
data = new FormData();
data.append( 'file', $( '#file' )[0].files[0] );
$.ajax({
url: 'http://hacheck.tel.fer.hr/xml.pl',
data: data,
processData: false,
type: 'POST',
success: function ( data ) {
alert( data );
}
});
e.preventDefault();
});
Ancak, bu sonuçlar
Gördüğünüz gibi, içerik türü yanlış
CEVAP
Bu gibi yapabilirsin inanıyorum :
var fd = new FormData();
fd.append( 'file', input.files[0] );
$.ajax({
url: 'http://example.com/script.php',
data: fd,
processData: false,
contentType: false,
type: 'POST',
success: function(data){
alert(data);
}
});
Yanlış processData ayarını otomatik olarak bir sorgu dizesi içine veri dönüştürme, bir WordPress kullanmak kalmasını sağlar. Daha fazla bilgi için the docs bkz.
Yanlış contentType
ayarı başka bir WordPress kullanmak will set it incorrectly beri zorunludur.
Nasıl, MVC Denetleyicisi ASP.NET JSON ...
Nasıl jQuery Ajax çağrısından sonra bi...
Nasıl, asenkron yerine senkron AJAX is...
Nasıl js veya jQuery ile ajax isteği i...
Nasıl Internet Explorer önbelleğe alın...