我试图了解Ajax请求中accept和dataType之间的区别。文档说明:
接受(默认值:取决于DataType) 类型:PlainObject 在请求标头中发送的内容类型,告诉服务器它将接受哪种响应。
dataType(默认值:Intelligent Guess(xml,json,script或html)) 类型:字符串 您期望从服务器返回的数据类型。
基本上,它是否相同?,它有相同的目的。
答案 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.parseJSON
,script
将执行从服务器接收的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会将其作为纯文本传递给成功处理程序。