`header("Content-type:application/json");` 的用途是什么?

14

我刚刚创建了一个JQuery ajax函数,用于从PHP中检索一些json编码的数据,以下是我的代码:

文件名:bank.php

$('form').on('submit', function(){

        var datatobesent  = $(this).serialize();
        $.ajax({
            data: datatobesent,
            url:'data.php',
            type:'GET'
        })
        .done(function(data){
            console.log(typeof(data));
        });
        return false;
})

而在data.php中,我编写了以下内容

if(isset($_GET)){
    $data = $_GET;
    echo json_encode($data);
    header("Content-type:application/json");
}
问题是,当我删除 data.php 文件中的 header("Content-type:application/json"); 行时,console.log 显示 ajax 返回的数据类型是 string

而当我在 bank.php 文件的 ajax 函数中添加 dataType:json 时,返回的类型变为 object

那么,header("Content-type:application/json"); 的作用是什么?


如果您正在使用dataType: Json,则无需使用header函数,它将为您提供json结果。您只需要解析或字符串化即可。 - Monty
1
旁注:标题在正文之前。如果您的代码没有崩溃,那是因为您已启用了输出缓冲。 - Álvaro González
1个回答

23

header("Content-type:application/json")函数发送http json头部到浏览器,告知它期望的数据类型。您可以在浏览器中看到每个请求的所有http头(如果您正在使用Chrome,则打开开发者工具,转到网络,调整视图并重新加载页面,您将看到浏览器发出的所有请求,如果您单击其中任何一个请求然后单击标头,您将看到每个请求的标头)。

当您使用此函数时,您会注意到从服务器发送的响应中的http头Content-Type:application/json。如果您不使用它,服务器将发送默认值,最可能是Content-type:text/html; charset=UTF-8

正如@Monty所述,如果您向AJAX添加了dataType:'json',则不需要使用此函数,因为Jquery将处理数据,即使使用text/html标头发送也是如此。

另请参见:jQuery AJAX Call to PHP Script with JSON Return

要了解更多关于标头的信息:http-headers-for-dummies


2
Or her, Firefox is a momma - pokeybit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接