希望这是一个准确的答案:
accepts 选项可让您更改请求中的 Accept 标头
当您更改此选项时,请求中的 Accept 标头将设置为指定的标头。请注意,它不是字符串,而是映射接受响应的 MIME 类型的对象。喜欢{ text: "text/plain", html: "text/html" }。服务器可以使用Accept 标头以请求所期望的格式提供响应,或者在它无法以请求所期望的格式之一提供响应的情况下失败。
一个非常重要的事情是,至少在 jQuery 1.11.3(我测试的地方)中,这个选项似乎不起作用,相反,我设法使用 headers 选项更改标题:headers: {Accept : "text/json"}。
dataType 选项可让您预处理响应
如果你定义了一个dataType,请求的响应将在被成功处理程序使用之前由jQuery进行预处理。例如:
如果指定了json,则使用jQuery.parseJSON 解析响应,然后作为对象传递给成功处理程序。
如果指定了script,$.ajax() 将执行从服务器接收到的 JavaScript,然后将其作为字符串传递给成功处理程序。
更多示例here,在“数据类型”部分。
如果未设置dataType,则响应的Content-Type 将确定应对响应进行哪些预处理。请注意,更改 dataType 也会更改 Accept 标头。通常不需要自己更改Accept 标头。
示例
request.php
<?php
if(strpos($_SERVER["HTTP_ACCEPT"],"text/javascript") === false)
exit("I only provide text/javascript responses");
echo "alert('This is my response!')";
index.html
<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 设置为 "script" jQuery 将尝试将其作为 javascript 执行,然后将其作为纯文本传递给成功处理程序。
如果您将dataType 更改为"text",Accept 标头将不包含"text/javascript",因此request.php 上的测试将失败。它将返回 "I only provide text/javascript responses" 并且因为 dataType 设置为 "text" jQuery 会将其作为纯文本传递给成功处理程序。