JQuery ajax işlevinde contentType ve dataType arasındaki farklar


123

Aşağıdaki Jquery geri arama işlevine sahibim ve bu konuda biraz şüphem var (Jquery'yi çok iyi bilmiyorum):

$("form.readXmlForm").submit(function() {
    // Riferimento all'elemento form che ha scatenato il submit 
    var form = $(this);
    // Variabile che contiene il riferimento al bottone clickato 
    var button = form.children(":first");

    $.ajax({        // Viene eseguita la chiamata AJAX 
        type: "POST", // Tipo di richiesta: POST 
        // URL verso quale viene inviata la richiesta
        url: form.attr("action"),    
        // Dati XML inviati: 
        data: "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><javaBean><foo>bar</foo><fruit>apple</fruit></javaBean>", 
        // Tipo di media type accettabile dalla response: 
        contentType: "application/xml", 
        dataType: "text", 

        success: function(text) { 
            MvcUtil.showSuccessResponse(text, button); 
        }, 

        error: function(xhr) { 
            MvcUtil.showErrorResponse(xhr.responseText, button); 
        }
    });

Gördüğünüz gibi bu işlev, arka uçta bu istek için parametreyi ayarlayan bir AJAX İsteği yürütür.

İsteği bir URL'ye gönderdiğimi, isteğin bir POST isteği olduğunu ve gönderdiğim verilerin aşağıdaki dize olduğunu belirledim:

"Barapple"

Ben arasındaki farklar ne olduğunu anlamak için bazı zorluklar contentType ve dataType

ContentType'ın HTTP Yanıtında kabul edilebilir veri türlerini belirttiğini düşünüyorum, doğru mu?

Ve dataType? Ne diyor? HTTP İsteğinde gönderdiğim veri türü?

Bu durumda "metin" olur çünkü XML kodunu uyumlu bir metin dizesi gönderiyorum?


İçerik türü ve veri türü amacı, jQuery kullanımı ile REST API kullanımı arasında farklılık gösteriyor mu?
sofs1

Yanıtlar:


172

Gönderen belgeler :

contentType (varsayılan: 'application / x-www-form-urlencoded; charset = UTF-8')

Tür: Dize

Sunucuya veri gönderirken bu içerik türünü kullanın. Varsayılan "application / x-www-form-urlencoded; charset = UTF-8" şeklindedir ve çoğu durumda uygundur. Bir içerik türünü açıkça $ .ajax () 'a iletirseniz, her zaman sunucuya gönderilir (veri gönderilmese bile). Karakter kümesi belirtilmezse, veriler sunucunun varsayılan karakter kümesi kullanılarak sunucuya iletilecektir; bunu sunucu tarafında uygun şekilde çözmeniz gerekir.

ve:

dataType (varsayılan: Intelligent Guess (xml, json, script veya html))

Tür: Dize

Sunucudan beklediğiniz veri türü. Hiçbiri belirtilmezse, jQuery yanıtın MIME türüne göre sonuca varmaya çalışacaktır (bir XML MIME türü XML üretecek, 1.4 JSON'da bir JavaScript nesnesi verecek, 1.4 komut dosyası komut dosyasını çalıştıracak ve diğer her şey olacaktır. dize olarak döndürülür).

Aslında düşündüğünüzün tam tersi.


3
Ayrıca contentType, başlıklar etkiler dataTypegelmez
Viney

83

görüntü açıklamasını buraya girin

İngilizcede:

  • ContentType: Sunucuya veri gönderirken bu içerik türünü kullanın. Varsayılan, application/x-www-form-urlencoded; charset=UTF-8çoğu durumda uygun olan değerdir.
  • Accepts: Sunucuya karşılığında ne tür bir yanıt kabul edeceğini söyleyen istek başlığında gönderilen içerik türü. Bağlıdır DataType.
  • DataType: Sunucudan beklediğiniz veri türü. Hiçbiri belirtilmezse, jQuery, yanıtın MIME türüne göre sonuca varmaya çalışır. Olabilir text, xml, html, script, json, jsonp.

9
Güzel görselleştirme. Teşekkürler.
Dr MAF
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.