Відмінності між 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-запит і що дані, які я надсилаю, є наступним рядком:

"барапл"

У мене є деякі труднощі , щоб зрозуміти , що відмінності між CONTENTTYPE і DATATYPE

Я думаю, що contentType визначає тип даних, які прийнятно отримують у відповіді HTTP, чи правильно?

А dataType? Що сказати? Тип даних, які я надсилаю у запиті HTTP?

У цьому випадку це "текст", тому що я надсилаю текстову рядок, що містить XML-код?


Чи відрізняється ціль типу вмісту та типу даних між використанням jQuery та використанням API REST?
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 (тип XML MIME дасть XML, в 1.4 JSON дасть об’єкт JavaScript, в 1.4 сценарій виконає сценарій, і все інше буде повернуто як рядок).

Вони по суті протилежні тому, що ви думали, що вони були.


3
Також contentTypeвпливає на заголовки, dataTypeне так
Viney

83

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

Англійською:

  • ContentType: Надсилаючи дані на сервер, використовуйте цей тип вмісту. За замовчуванням - application/x-www-form-urlencoded; charset=UTF-8це нормально для більшості випадків.
  • Accepts: Тип вмісту, надісланий у заголовку запиту, який повідомляє серверу, яку відповідь він прийме взамін. Залежить від DataType.
  • DataType: Тип даних, які ви очікуєте від сервера. Якщо жоден не вказаний, jQuery спробує зробити висновок на основі типу відповіді MIME. Може бути text, xml, html, script, json, jsonp.

9
Приємна візуалізація. Дякую.
Д-р МАФ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.