为什么导致‘意外输出’的插件会产生AJAX问题?

时间:2011-10-28 作者:djb

我只需修复管理区域的AJAX故障(媒体库中的“搜索/附加”对话框不起作用),并找到了一个罪魁祸首插件。

激活时,该插件生成“意外输出”(在最后的php标记后有一个空格)。

删除此项解决了问题。为什么一开始是它造成的?

1 个回复
最合适的回答,由SO网友:EarnestoDev 整理而成

这个HTTP Protocol 要同时运行页面加载、文件下载和AJAX功能,需要标题(多行)包括Name: Value 然后输入两个分隔符,然后输入实际数据。

Headers are very important 因为它们控制浏览器应如何处理接收到的数据,并说明数据是什么。AJAX需要发送指定所交付数据的内容类型(甚至内容长度)的标题。它可以是文本/HTML/XML/JSON/JS。。。等等。不管怎样,错误的标头可能会导致错误的数据解码。浏览器不应猜测您发送的内容。他们应该确切地知道基于标题的广告内容。

这就是为什么AJAX需要发送一些特殊的头。但任何类型的输出后都不能发送头。因此,使用header() 如果在发送数据后执行此操作,PHP中的函数将生成错误。PHP试图告诉您,在实际数据未交付之前,需要向浏览器发送特殊指令。这会导致连锁反应,因为错误输出会破坏交付数据的XML/JSON一致性。这反过来又破坏了AJAX功能,因为XML/JSON无法解码(它包含由过早输出产生的错误生成的非法结构)。

这就是为什么插件不能以空格开头/结尾非常重要。如果您有输出问题,请使用headers_sent() 函数,它将允许您发现输出从何处开始,并修复出现问题的代码。

我很确定我没有任何意义,但Web开发人员应该了解驱动Web的底层协议。不是像TCP-IP/ICMP这样的低级别。。。但更高级别的HTTP... <我们在这个级别工作

当做

结束

相关推荐

AJAX日历导航返回-1

我想通过$month 和$year 单击上一个/下一个链接时通过AJAX获得的值,但我得到的只是-1 内容应该在哪里。我的JavaScript函数和AJAX调用位于自定义页面模板中,page-calendar.php 和functions.php, see all of the code here. 总之,下面是相关的AJAX脚本:在里面functions.php:/* draw_ajax_calendar($month, $year) function, see link above for that