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

时间:2017-06-05 21:47:53

标签: php http curl http-headers

我一直试图弄清楚php脚本中header('Content-Type: application/json')的用法是什么,我在stackoverflow上找到了关于这个主题的不同问题和答案,但我仍然没有#39;完全得到它......

所以这就是问题所在:我在一些php项目中看到过这行代码,我试图理解

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

OR

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

如果有人回答我可以帮助我的另一件事,最近我一直在用cURL从资源(外部网址)中检索json,我不得不在请求中放入这个标题(Content-type:application / json)。我是否将此标题发送到exertnal资源或是这个MY标题,以便我可以处理返回的json?

感谢

4 个答案:

答案 0 :(得分:6)

对于那些感兴趣的人,我终于发现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(响应),当我有这个标题,或者dataType:“json”,我从警报中得到[object Object]。所以这个标题函数用于向调用页面指示它返回的数据类型,这样你就可以知道如何在我的脚本中,如果我没有header('Content-Type: application/json'),我将不得不在这样的javascript中解析响应:JSON.parse(response)以使其成为json,但是使用该头,我已经有了一个json对象,我可以使用jSON.stringify(response)将其解析为html。

答案 1 :(得分:1)

您应始终为任何HTTP响应设置Content-Type,以描述您在该响应中提供的内容。

是JSON还是其他东西,无论是AJAX请求还是其他任何请求。

您还应该为任何请求设置Content-Type来描述您的POST有效负载。

答案 2 :(得分:0)

W3 Description For the Content-Type

  

Content-Type字段的目的是充分描述正文中包含的数据,以便接收用户代理可以选择适当的代理或机制来向用户呈现数据,或以其他方式处理数据。适当的方式。

简而言之,只是告知收件人他收到了哪种数据并相应地使用它。

答案 3 :(得分:0)

在PHP中,如果您未在脚本中指定Content-Type标头,则默认为您php.ini文件中已配置text/html的任何内容header('Content-Type: application/json')

调用Content-Type将覆盖该默认设置,以便脚本在请求时以curl回复。

此外,在使用Content-type:application/json标题调用$('input[id^=txtEntry]').css('background', 'green'); $('#RecordsWrapper') .on("click", "input[id^=cmdUpdate]", "input", function(e) { fldTarget = $(this); fldAccountID = fldTarget.parent().find("input[id^=txtAccount]").prop("id"); console.log('fldAccountID-->' + fldAccountID); })时,您指定的是请求正文的内容类型,而不是预期的响应。