SORU
7 AĞUSTOS 2011, Pazar


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:

multipartformdata

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

wrongcontenttype

Gördüğünüz gibi, içerik türü yanlış

CEVAP
23 Kasım 2011, ÇARŞAMBA


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Awesomesauce Network

    Awesomesauce

    4 EKİM 2012
  • Doug Bernards

    Doug Bernard

    7 Kasım 2007
  • Elefant Traks

    Elefant Trak

    5 HAZİRAN 2007