Различия между contentType и dataType в функции jQuery ajax

123

У меня есть следующая функция обратного вызова JQuery, и я немного сомневаюсь в этом (я не очень хорошо знаю 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); 
        }
    });

Как вы можете видеть, эта функция просто выполняет запрос AJAX к бэкэнду, устанавливая параметр для этого запроса.

Я установил, что я отправляю запрос по URL-адресу, что запрос является запросом POST и что данные, которые я отправляю, представляют собой следующую строку:

"Barapple"

Мне сложно понять, в чем разница между contentType и dataType

Я думаю, что contentType указывает тип данных, которые могут быть получены в HTTP-ответе, верно?

А dataType? Что сказать? Тип данных, которые я отправляю в HTTP-запросе?

В данном случае это «текст», потому что я отправляю текстовую строку, которая представляет собой XML-код?

AndreaNobili
источник
Отличается ли назначение типа содержимого и типа данных при использовании jQuery и REST API?
sofs1

Ответы:

172

Из документации :

contentType (по умолчанию: 'application / x-www-form-urlencoded; charset = UTF-8')

Тип: Строка

При отправке данных на сервер используйте этот тип контента. По умолчанию это «application / x-www-form-urlencoded; charset = UTF-8», что подходит для большинства случаев. Если вы явно передадите тип содержимого в $ .ajax (), он всегда будет отправляться на сервер (даже если данные не отправляются). Если кодировка не указана, данные будут передаваться на сервер с использованием кодировки сервера по умолчанию; вы должны соответствующим образом декодировать это на стороне сервера.

и:

dataType (по умолчанию: Intelligent Guess (xml, json, script или html))

Тип: Строка

Тип данных, которые вы ожидаете от сервера. Если ничего не указано, jQuery попытается вывести его на основе MIME-типа ответа (MIME-тип XML даст XML, в 1.4 JSON даст объект JavaScript, в 1.4 скрипт выполнит скрипт, а все остальное будет возвращается как строка).

По сути, они противоположны тем, чем вы думали.

Энтони Грист
источник
3
Также contentTypeвлияет на заголовки, dataTypeне
Вини
83

введите описание изображения здесь

По-английски:

  • ContentType: При отправке данных на сервер используйте этот тип содержимого. По умолчанию это application/x-www-form-urlencoded; charset=UTF-8нормально, что подходит для большинства случаев.
  • Accepts: Тип содержимого, отправленный в заголовке запроса, который сообщает серверу, какой ответ он примет взамен. Зависит от DataType.
  • DataType: Тип данных, которые вы ожидаете от сервера. Если ничего не указано, jQuery попытается сделать вывод на основе MIME-типа ответа. Может быть text, xml, html, script, json, jsonp.
Мария Инес Парнисари
источник
9
Хорошая визуализация. Спасибо.
Д-р МАФ