何时在 PHP 中使用 header('Content-Type: application/json')

新手上路,请多包涵

我一直试图弄清楚 header('Content-Type: application/json') 在 php 脚本中的真正用途是什么,我在 stackoverflow 上发现了关于这个主题的不同问题和答案,但我仍然没有完全理解它……

所以问题来了:我在一些 php 项目中看到过这行代码,我正在努力理解

  • 如果在另一个网页调用此实际脚本(例如使用 ajax)时使用它,以便调用页面可以从 php 页面获取 json

或者

  • 如果此脚本意味着 php 页面将处理从另一个网页发送的 json。或者也许是别的什么???

如果得到回答,另一件事可以帮助我,最近我一直在使用 cURL 从资源(外部 url)中检索 json,我不得不将这个标头(Content-type:application/json)放在请求中。我是将这个标头发送到外部资源还是这个我的标头以便我可以处理返回的 json ?

谢谢

原文由 naspy971 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

好吧,有兴趣的朋友,我终于想通了 header('Content-Type: application/json')在另一个页面调用php脚本时使用的,这样另一个页面就可以自动将结果解析为json

例如我的 test.php 中有:

 header('Content-type: application/json; charset=utf-8');
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo json_encode($arr); // {"a":1,"b":2,"c":3,"d":4,"e":5}

在我的 main.js 中

function test() {
    $.ajax({
        url: 'test.php',
        type: 'GET',
        //dataType: 'html',
        success: function (response) {
            alert(response);
        }
    });
};

当我没有将 dataType 设置为“json”或者当我的 test.php 中没有标头时,警报会给出 {"a":1,"b":2,"c":3,"d":4,"e":5} 这是一个字符串(尝试使用 typeof(response),当我有这个标头,或数据类型:“json”,我从警报中得到 [object Object] 。所以这个标头函数用于向调用页面指示它返回哪种类型的数据,以便您知道如何处理它。在我的脚本中,如果我没有 header('Content-Type: application/json') ,我将不得不像这样解析 javascript 中的响应: JSON.parse(response) 以使其成为 json ,但是有了那个标头,我已经有了一个 json 对象,我可以用 jSON.stringify(response) 将它解析为 html。

原文由 naspy971 发布,翻译遵循 CC BY-SA 4.0 许可协议

在 PHP 中,如果您没有在脚本中指定 Content-Type 标头,它将默认为您在 php.ini 文件中配置 的默认 mimetype ,通常是 text/html

调用 header('Content-Type: application/json') 将覆盖默认设置,以便脚本在请求时响应 Content-Type

此外,当使用 Content-type:application/json 标头调用 curl 时,您指定的是请求正文的内容类型,而不是预期的响应。

原文由 JoshA 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏