jQuery Ajax関数でのcontentTypeとdataTypeの違い


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リクエストであること、および送信するデータが次の文字列であることを設定しました。

「バラップル」

contentTypedataTypeの違いを理解するのが難しい

contentTypeは、HTTPレスポンスで受け入れられるデータのタイプを指定すると思いますが、それは正しいですか?

そしてdataType?何を言います?HTTPリクエストで送信するデータのタイプは?

この場合は「テキスト」です。XMLコードを表すテキスト文字列を送信しているからですか?


コンテンツタイプとデータタイプの目的は、jQueryの使用とREST APIの使用で異なりますか?
sofs1

回答:


172

ドキュメントから:

contentType(デフォルト: 'application / x-www-form-urlencoded; charset = UTF-8')

タイプ:文字列

サーバーにデータを送信する場合は、このコンテンツタイプを使用します。デフォルトは「application / x-www-form-urlencoded; charset = UTF-8」で、ほとんどの場合これで問題ありません。content.typeを明示的に$ .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
素晴らしい視覚化。ありがとう。
Dr. MAF
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.