[jquery] $ .ajax-dataType

차이점은 무엇입니까

contentType: "application/json; charset=utf-8",
dataType: "json",

vs.

contentType: "application/json",
dataType: "text",



답변

  • contentType특정 형식을 지정하여 서버로 전송 된 HTTP 헤더 입니다.
    예 : JSON 또는 XML을 보내고 있습니다.
  • dataTypejQuery에게 어떤 종류의 응답 을 기대 하고 있는지 말하고 있습니까 ?
    JSON, XML 또는 HTML 등이 필요합니다. 기본값 은 jQuery가이를 시도하여 알아내는 것입니다.

$.ajax()문서뿐만 아니라 이러한 대한 자세한 설명이 있습니다.


특정 경우 첫 번째는에 응답 을 요청 UTF-8하고 두 번째는 상관하지 않습니다. 또한 첫 번째는 응답 을 JavaScript 객체로 처리하고 두 번째는 응답 을 문자열로 처리합니다.

첫 번째는 다음과 같습니다.

success: function(data) {
  // get data, e.g. data.title;
}

두번째:

success: function(data) {
  alert("Here's lots of data, just a string: " + data);
}


답변

(ps : Nick Craver의 답변이 잘못되었습니다)

contentType은 요청의 일부로 서버에 전송되는 데이터의 형식을 지정합니다 (응답의 일부로도 나중에 전송할 수 있음).

dataType은 클라이언트 (브라우저)가받을 데이터의 예상 형식을 지정합니다.

둘 다 교환 할 수 없습니다.

  • contentType서버로 전송되는 데이터 형식 (즉, 메시지 본문의 내용)을 지정하여 서버로 전송되는 헤더입니다. 이것은 POST 및 PUT 요청과 함께 사용됩니다. 일반적으로 POST 요청을 보낼 때 메시지 본문은 다음과 같은 매개 변수로 전달됩니다.

================================

샘플 요청 :

POST /search HTTP/1.1
Content-Type: application/x-www-form-urlencoded
<<other header>>

name=sam&age=35

================================

“name = sam & age = 35″위의 마지막 행은 메시지 본문이며 contentType은 메시지 본문에 양식 매개 변수를 전달하므로 application / x-www-form-urlencoded로 지정합니다. 그러나 매개 변수를 보내는 것에 만 국한되지 않고 json, xml 등을 보낼 수 있습니다 (다른 유형의 데이터를 보내는 것이 RESTful 웹 서비스에 특히 유용합니다).

================================

샘플 요청 :

POST /orders HTTP/1.1
Content-Type: application/xml
<<other header>>

<order>
   <total>$199.02</total>
   <date>December 22, 2008 06:56</date>
...
</order>

================================

이번에는 ContentType이 application / xml입니다. 이것이 우리가 보내는 이유입니다. 위의 예제는 샘플 요청을 보여주었습니다. 마찬가지로 서버에서 보낸 응답은 서버가 다음과 같이 보내는 것을 지정하는 Content-Type 헤더를 가질 수 있습니다.

================================

샘플 응답 :

HTTP/1.1 201 Created
Content-Type: application/xml
<<other headers>>

<order id="233">
   <link rel="self" href="http://example.com/orders/133"/>
   <total>$199.02</total>
   <date>December 22, 2008 06:56</date>
...
</order>

================================

  • dataType예상되는 응답 형식을 지정합니다. Accept 헤더와 관련이 있습니다. JQuery는 응답의 내용 유형을 기반으로 추론하려고 시도합니다.

================================

샘플 요청 :

GET /someFolder/index.html HTTP/1.1
Host: mysite.org
Accept: application/xml
<<other headers>>

================================

위의 요청은 서버에서 XML을 기대하고 있습니다.

당신의 질문에 관해서는

contentType: "application/json; charset=utf-8",
dataType: "json",

여기에서는 UTF8 문자 세트를 사용하여 json 데이터를 보내고 서버에서 json 데이터를 다시 기대합니다. dataType에 대한 JQuery 문서에 따라

json 유형은 페치 된 데이터 파일을 JavaScript 오브젝트로 구문 분석하고 생성 된 오브젝트를 결과 데이터로 리턴합니다.

따라서 성공 핸들러에서 얻는 것은 적절한 자바 스크립트 객체입니다 (JQuery가 json 객체를 변환합니다)

이므로

contentType: "application/json",
dataType: "text",

JQuery 문서에 따라 인코딩을 언급하지 않았으므로 여기에 json 데이터를 보내고 있습니다.

문자 집합이 지정되지 않으면 서버의 기본 문자 집합을 사용하여 서버로 데이터가 전송됩니다. 서버 측에서이를 적절하게 디코딩해야합니다.

dataType이 텍스트로 지정되어 있으므로 dataType의 문서에 따라 성공 핸들러에서 얻는 것은 일반 텍스트입니다.

text 및 xml 유형은 처리하지 않고 데이터를 반환합니다. 데이터는 단순히 성공 처리기로 전달됩니다.


답변

에 따라 문서 :

  • "json": 응답을 JSON으로 평가하고 JavaScript 객체를 반환합니다. jQuery 1.4에서 JSON 데이터는 엄격한 방식으로 구문 분석됩니다. 잘못된 JSON이 거부되고 구문 분석 오류가 발생합니다. 올바른 JSON 형식에 대한 자세한 정보는 json.org를 참조하십시오.
  • "text": 일반 텍스트 문자열입니다.

답변

두 개의 API를 동시에 호출하면 jQuery Ajax 로더가 제대로 작동하지 않습니다. 이 문제점을 해결하려면 isAsyncAjax 설정 의 특성을 사용하여 API를 하나씩 호출해야 합니다. 또한 설정에 오류가 없어야합니다. 그렇지 않으면 로더가 작동하지 않습니다. 예를 들어 POST / PUT / DELETE / GET 호출을위한 정의되지 않은 컨텐츠 유형, 데이터 유형.


답변