Perbedaan antara contentType dan dataType dalam fungsi ajax jQuery

123

Saya memiliki fungsi panggilan balik Jquery berikut dan saya memiliki sedikit keraguan tentang itu (saya tidak terlalu paham Jquery):

$("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); 
        }
    });

Seperti yang Anda lihat, fungsi ini cukup menjalankan Permintaan AJAX ke pengaturan backend parameter untuk permintaan ini.

Saya telah menetapkan bahwa saya mengirimkan permintaan ke URL, bahwa permintaan tersebut adalah permintaan POST dan data yang saya kirim adalah string berikut:

"barapple"

Saya mengalami beberapa kesulitan untuk memahami apa perbedaan antara contentType dan dataType

Saya pikir contentType menentukan jenis data yang dapat diterima diterima di Respon HTTP, apakah benar?

Dan dataType? Apa yang dikatakan? Jenis data yang saya kirim di Permintaan HTTP?

Dalam hal ini adalah "teks" karena saya mengirimkan string tekstual yang merepresentasikan kode XML?

AndreaNobili
sumber
Apakah tujuan tipe konten dan tipe data berbeda antara penggunaan jQuery dan penggunaan REST API?
sofs1

Jawaban:

172

Dari dokumentasi :

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

Jenis: String

Saat mengirim data ke server, gunakan tipe konten ini. Default-nya adalah "application / x-www-form-urlencoded; charset = UTF-8", yang baik untuk sebagian besar kasus. Jika Anda secara eksplisit mengirimkan tipe konten ke $ .ajax (), maka itu akan selalu dikirim ke server (bahkan jika tidak ada data yang dikirim). Jika tidak ada charset yang ditentukan, data akan dikirim ke server menggunakan charset default server; Anda harus memecahkan kode ini dengan benar di sisi server.

dan:

dataType (default: Intelligent Guess (xml, json, script, atau html))

Jenis: String

Jenis data yang Anda harapkan kembali dari server. Jika tidak ada yang ditentukan, jQuery akan mencoba menyimpulkannya berdasarkan jenis respons MIME (jenis XML MIME akan menghasilkan XML, di 1.4 JSON akan menghasilkan objek JavaScript, di 1.4 skrip akan mengeksekusi skrip, dan yang lainnya akan dikembalikan sebagai string).

Mereka pada dasarnya kebalikan dari apa yang Anda pikirkan.

Anthony Grist
sumber
3
Juga contentTypememengaruhi header, dataTypebukan
Viney
83

masukkan deskripsi gambar di sini

Dalam Bahasa Inggris:

  • ContentType: Saat mengirim data ke server, gunakan jenis konten ini. Default-nya adalahapplication/x-www-form-urlencoded; charset=UTF-8 , yang bagus untuk sebagian besar kasus.
  • Accepts: Jenis konten yang dikirim di header permintaan yang memberi tahu server jenis respons apa yang akan diterima sebagai balasannya. Tergantung DataType.
  • DataType: Jenis data yang Anda harapkan kembali dari server. Jika tidak ada yang ditentukan, jQuery akan mencoba menyimpulkannya berdasarkan jenis respons MIME. Bisa jadi text, xml, html, script, json, jsonp.
Maria Ines Parnisari
sumber
9
Visualisasi yang bagus. Terima kasih.
Dr. MAF