dataType vs accepted - Ajax请求

时间:2015-10-11 01:35:04

标签: jquery ajax

我试图了解Ajax请求中accept和dataType之间的区别。文档说明:

Documentation

接受(默认值:取决于DataType) 类型:PlainObject 在请求标头中发送的内容类型,告诉服务器它将接受哪种响应。

dataType(默认值:Intelligent Guess(xml,json,script或html)) 类型:字符串 您期望从服务器返回的数据类型。

基本上,它是否相同?,它有相同的目的。

1 个答案:

答案 0 :(得分:13)

这是一个有希望的准确答案:

accepts选项可让您更改请求中的Accept标题

更改此选项后,请求中的Accept标头将设置为指定的标头。请注意,它不是字符串,而是映射已接受响应的MIME类型的对象。像{ text: "text/plain", html: "text/html" }一样。服务器可以使用Accept标头以请求所期望的格式提供响应,或者如果它无法以请求所期望的格式之一提供响应,则会失败。

一个非常重要的事情是,至少在jQuery 1.11.3(我测试过)中,这个选项似乎无法正常工作,而是设法使用headers选项更改标题:{{1 }}

headers: {Accept : "text/json"}选项可让您预处理回复

如果您定义dataType,请求的响应将由jQuery预处理,然后可用于succes处理程序。例如:

  

如果指定了dataType,则在作为对象传递给成功处理程序之前,使用json解析响应。

     

如果指定了jQuery.parseJSONscript将执行从服务器接收的JavaScript,然后将其作为字符串传递给成功处理程序。

更多示例here,在"数据类型"部分。

如果未设置$.ajax(),则响应的dataType将确定应对响应执行哪些预处理。请注意,更改Content-Type也会更改dataType标题。通常不需要自己更改Accept标题。

示例

request.php

Accept

的index.html

<?php
if(strpos($_SERVER["HTTP_ACCEPT"],"text/javascript") === false)
    exit("I only provide text/javascript responses");

echo "alert('This is my response!')";

<button id="send">Send</button> <div id="response"></div> <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script> <script> $(function(){ $("#send").click(function(){ $.ajax({ method: "GET", url: "request.php", dataType: "script" // Change this to "text" and you will see the difference }).done(function(data) { $("#response").text(data); }); }); }); </script> 设置为dataType时,"script"标题将包含Accept,因此"text/javascript"上的测试将通过。它将返回request.php,因为"alert('This is my response!')"设置为dataType,jQuery将尝试将其作为javascript执行,然后将其作为纯文本传递给成功处理程序。

如果您将"script"更改为dataType,则"text"标头将不包含Accept,因此"text/javascript"上的测试将失败。它将返回request.php,因为"I only provide text/javascript responses"设置为dataType,jQuery会将其作为纯文本传递给成功处理程序。