我有一个奇怪的问题,我正在尝试编写一个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被包含在响应中?
答案 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标记,并使用exit
或die
终止脚本。尝试找到发送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)。