我正在尝试调试一个简单的PHP / JSON / jQuery问题。
以下PHP脚本:
header('Content-type: text/javascript');
echo json_encode(array('type'=>'error','message'=>'arg'));
正在被jQuery使用,但是当行:
var results = jQuery.parseJSON(responseText);
执行后,jQuery JSON解析器提供以下内容:
uncaught exception: Invalid JSON: <head></head><body><pre>{"type":"error","message":"oops!"}</pre></body>
显然头部/身体/前部不应该返回。
在我的PHP代码中,我看不到任何隐藏的字符或任何乱序。
有什么想法吗?
答案 0 :(得分:1)
过去两天这个让我难过。我正在使用jQuery Form插件的ajaxSubmit函数通过AJAX提交表单而无需重新加载页面。在this question向我展示了我以前没有注意到的参数后,我终于偶然发现了答案:dataType。
在幕后,正在创建一个iframe,并且实际上正在回调服务器。服务器的响应是从iframe中提取的,iframe会带来标签。
jQuery Form插件允许您指定服务器期望的响应类型来处理这种情况。如果我将'json'指定为响应类型,则执行以下几行代码以从标记中获取JSON:
// account for browsers injecting pre around json response
var pre = doc.getElementsByTagName('pre')[0];
if (pre) {
xhr.responseText = pre.innerHTML;
}
(doc是对iframe文档的引用,xhr是最终从插件函数返回的XmlHttpResponse对象。)
我不确切知道你是如何进行AJAX调用的,但我猜测一个类似的构造(可能使用文档片段)将允许你从响应中提取必要的JSON。
答案 1 :(得分:0)
尽量不发送header('Content-type: text/javascript');
答案 2 :(得分:0)
json for php找到“function send_as_json($obj)
”
答案 3 :(得分:0)
将标题设置为application / json。