快速摘要:我正在使用SilverStripe CMS,它通过一组ajax延迟加载面板在其管理员中加载UI。它在开发中都很棒。并且用于获取主面板数据的ajax调用在两者中都有效。也就是说,它在dev和生产服务器上返回数据(在本例中为html),带有200个代码(因此Firebug说)。
现在,在处理程序中有成功,错误和完整功能 - 成功获取数据并创建主内容面板。在我的本地开发服务器上,成功和完全开火都很好。但是在生产中,只有完全火灾,即使我可以看到Firebug数据返回得很好(就像我说的那样200)。为什么没有成功运行?当然,我可以将成功逻辑移动到完成,但是这台服务器可能会继续产生问题。
以下是Dev ajax调用的响应标头:
Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection Keep-Alive
Content-Length 38407
Content-Type text/html; charset=utf-8
Date Thu, 02 Aug 2012 01:02:08 GMT
Expires Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive timeout=5, max=100
Pragma no-cache
Server Apache/2.2.22 (Unix) mod_ssl/2.2.22 OpenSSL/1.0.1c DAV/2 PHP/5.3.12
Set-Cookie PastMember=1; expires=Wed, 31-Oct-2012 01:02:09 GMT; path=/; httponly
X-Controller CMSPagesController
X-Include-CSS /framework/admin/thirdparty/jquery-notice/jquery.notice.css?m=1340880397...
X-Include-JS /framework/thirdparty/jquery/jquery.js?m=1340880400...
X-Powered-By PHP/5.3.12
X-Title SilverStripe - Pages
以下是生产中的标题(明显不同的是编码/压缩):
Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0
Connection Keep-Alive
Content-Encoding gzip
Content-Length 2796
Content-Type text/html; charset=utf-8
Date Thu, 02 Aug 2012 01:44:20 GMT
Expires Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive timeout=2, max=98
Pragma no-cache
Server Apache
Set-Cookie PastMember=1; expires=Wed, 31-Oct-2012 01:44:22 GMT; path=/; httponly
Vary Accept-Encoding
X-Controller CMSPagesController
X-Include-CSS /framework/admin/thirdparty/jquery-notice/jquery.notice.css?m=1342411329...
X-Include-JS /framework/thirdparty/jquery/jquery.js?m=1342412461...
X-Mod-Pagespeed 0.10.21.2-1381
X-Title SilverStripe - Pages
为了让事情变得非常奇怪,我可以通过破坏文档来“修复”这种情况。如果我在DOCTYPE:.<!DOCTYPE html>
之前添加一个字符,则运行成功处理程序并加载面板。删除一个字符,面板不再加载。我很难过: - /
====编辑====
这是ajax处理程序,非常香草,没什么特别的。我添加了控制台进行调试。错误永远不会在开发服务器上运行,只是成功和完成,生产时只有完成。现在我的猜测是它试图根据doctype(html5)验证html并且它会出错?我不认为jQuery走得那么远。此外,我将关闭压缩和生产中的pagespeed模块以查看是否有效果,因为dev没有这些功能。
$.ajax({
url: url,
complete: function() {
self.removeClass('loading');
if(window.console) console.log('complete');
},
success: function(data, status, xhr) {
if(window.console) console.log('success');
self.html(data);
},
error: function(){
if(window.console) console.log('error');
}
});
答案 0 :(得分:1)
一旦我禁用了它并重新启动了apache,中提琴,jQuery成功读取了html数据并正确触发了事件,现在面板正在加载它们应该。为什么?出于某种原因,&#34;优化&#34;这个pagespeed在某种程度上杀了html结构,但显然很重要。
我在页面速度之前和之后通过w3c验证器运行了片段,并且存在相同的三个错误。所以最后我还不确定页面速度是如何搞砸的,我只知道它是值得的。