PHP JSON响应包含HTML标头

时间:2011-01-25 11:20:20

标签: php jquery json content-type

我有一个奇怪的问题,我正在尝试编写一个PHP页面,将一些JSON返回给Jquery AJAX调用。问题是尽管将内容类型设置为application / json,但响应似乎总是包含HTML标题。

这是PHP代码:

// some code that generates an array
header("Content-type: application/json");
echo json_encode($return);

然后在Javascript中:

$.ajax({
        url: '/VAPHP/services/datatable.php',
        dataType: 'json',
        data:
            {
                type: 'invoices'
            },
        success: function(data)
        {
            // show a message saying it's been sent!
            alert('Success!');
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            alert('Error!');
        }


    });

响应似乎总是这样:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title></title>
</head>
<body>
{"aaData":[["2007-08-01","91109507","Invoice","10.000000","AUD"],["2007-08-02","91110103","Invoice","5.000000","AUD"],["2007-08-02","91110122","Invoice","305.000000","AUD"],["2007-08-02","91110129","Invoice","320.000000","AUD"],["2007-08-03","91111146","Credit
for Returns","10.000000","AUD"],["2007-08-06","91111895","Credit
for Returns","320.000000","AUD"],["2007-09-03","91128486","Credit
Memo","5.000000","AUD"],["2007-09-03","91128487","Credit
etc, etc

根据响应标题,它当然认为它是JSON:

HTTP/1.1 200 OK
Content-Type: application/json
Server: Microsoft-IIS/7.5
X-Powered-By: PHP/5.3.3

每当我运行代码并且它警告“错误!”每次都被解雇,这是可以理解的...... 任何人都有任何想法为什么HTML被包含在响应中?

5 个答案:

答案 0 :(得分:5)

调用header()实际上与响应中返回的HTML代码无关。

header()用于设置HTTP标头,而HTML代码(<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">)则在HTTP响应的正文中发送。

所以代码行

header("Content-type: application/json");

他的工作正确,因为回复包含正确的内容类型:

Content-Type: application/json

那有什么不对?可能你有在处理json的代码之前执行的代码。您应该在响应中仅发送json编码的消息,而不使用任何HTML标记,并使用exitdie终止脚本。尝试找到发送HTML标记的代码,然后将代码放在之前。

答案 1 :(得分:2)

好的,我找到了自己的答案,看起来我在PHP.ini文件中打开了tidyhtml,并且有一个

ob_start("ob_tidyhandler"); 

在我的一个全局包中。评论说,这一切都很好。感谢大家的时间!

答案 2 :(得分:0)

您是否尝试过评论整个“标题(...)” - 部分?它没有它应该工作。 AJAX调用获取PHP程序输出的所有内容,在这种情况下包括标题。

答案 3 :(得分:0)

我觉得你的代码的某些部分会自动发出HTML DTD和head部分,以便从php代码库中获取所有响应。你在使用框架吗?如果是这样的话? json.txt工作的事实表明js,浏览器或其间的任何代理都没有错。

我建议你调试php代码流,看看这个部分被添加到html响应的位置。

答案 4 :(得分:0)

在你做之前可能会有一些帖子标题。你可以为此提供更多的PHP代码吗?请记住,php标签之外的单个空格会强制标头的输出(默认为http)。