确定HTTP请求的数据类型

时间:2015-06-20 00:32:57

标签: javascript php ajax json http

我看到使用dataType我可以使用json属性来告诉jQuery我期望从服务器得到什么样的响应,通常是CONTENT_TYPE

但是在服务器端,我如何知道所请求的数据类型?

我知道通常服务器应该根据请求的内容知道要发送什么,但我的用例在这里有点不同。我有一个用PHP构建的错误处理程序,我想知道以哪种格式输出调试信息。如果发生致命/语法错误警告,脚本甚至可能无法访问与请求相关联的请求处理函数。

有一个application/x-www-form-urlencoded标题,但显然它总是POST,而且只会在HTTP_ACCEPT次请求时发送。

并且application/json, text/javascript, */*; q=0.01标题看起来像fscanf()。我需要解析这个字符串吗?

2 个答案:

答案 0 :(得分:1)

客户端没有标准方法告诉服务器需要什么数据类型。客户端不会告诉“我想要text / plain”或“只请HTML”(这只能从假定来自URI)。他们只说出他们可能解释的内容(HTTP_ACCEPT)以及他们发布的内容(CONTENT_TYPE)。

要使服务器端错误处理程序可靠地确定要使用的输出格式,您可以在请求中传递其他请求标头或查询参数,例如:

$.ajax({
    ...
    headers: {
        "X-Expected-Format": "text/plain"
    }
    ...
});

答案 1 :(得分:0)

Ajax客户端没有标准约定来告诉服务器它在响应中想要什么样的数据格式。

通常,对于特定的Ajax请求,其中一项是正确的。

  1. 已知请求生成特定类型的响应(例如,此响应仅生成JSON)。客户端不请求特定类型的数据。它只知道这个特定的请求只返回JSON。

  2. 请求具有与其一起发送的特定参数,客户端使用该参数来请求特定类型的返回数据(例如XML,HTML,JSON等...)。这可能是一个查询参数(如果它是GET请求)。

  3. Ajax调用的路径决定了请求的响应类型。例如,我见过一个API,它使用请求中的一个路径段来确定响应应该是XML还是JSON。

  4. 虽然可以使用自定义HTTP标头完成选项2,但通常不会使用HTTP标头。如果发送了任何参数,它通常作为ajax调用参数的一部分发送(但是它们被发送)。

    jQuery提供的dataType选项是告诉jQuery库它应该期望什么类型的响应,例如,如果它是JSON,它可以为你解析JSON。通常不需要此参数,因为jQuery通常可以根据HTTP标头或基于响应本身的样本来确定响应的类型。为Ajax请求指定dataType肯定没有坏处,但绝对必须与服务器返回的数据类型相匹配,并且您设置的dataType值不会以任何方式发送到服务器。这纯粹是对客户端库的指令,指示它在到达时应如何处理响应。