2

わかりました、これは奇妙なものです。

簡単な要約: 私は SilverStripe CMS を使用しており、一連の ajax 遅延読み込みパネルを介して管理画面に UI を読み込みます。それはすべて開発でうまく機能します。また、メイン パネルのデータを取得するための ajax 呼び出しは、両方で機能しています。つまり、開発サーバーと本番サーバーの両方でデータ (この場合は html) を 200 コードで返します (Firebug によると)。

ここで、ハンドラーには、成功、エラー、および完全な関数があります。成功はデータを取得し、メイン コンテンツ パネルを作成します。私のローカル開発サーバーでは、成功と完了の両方が正常に起動します。しかし、本番環境では、データが正常に返されていることを Firebug で確認できますが (私が言ったように 200 で)、完全な発火のみです。成功が実行されないのはなぜですか? 確かに、成功ロジックをcompleteに移動することはできますが、このサーバーは問題を引き起こし続ける可能性があります。

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>と、成功ハンドラーが実行され、パネルが読み込まれます。1 文字を削除すると、パネルが読み込まれなくなります。私は困惑しています:-/

====編集====

これは ajax ハンドラーです。非常にバニラで、特別なことは何も行われていません。デバッグ用のコンソールを追加しました。エラーは実行されず、開発サーバーで成功して完了し、本番環境でのみ完了します。今、私の推測では、doctype (html5) に基づいて html を検証しようとしていて、エラーが発生していますか? jQueryがそこまで進んでいるとは思いませんでした。また、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');
}
});
4

1 に答える 1

1

わかりました、やっとわかりました。問題は、まだベータ版の apache の mod です (少なくとも私のホストでは)。mod_pagespeed については、 https ://developers.google.com/speed/pagespeed/mod ですべて読むことができます。

それを無効にしてapache、viola、jQueryを再起動すると、htmlデータとイベントが正しく読み取られ、パネルが正常にロードされるようになりました。なんで?何らかの理由で、pagespeed が行っていた「最適化」により、html 構造が数分で破棄されましたが、明らかに重要な方法でした。

ページスピードの前と後の両方で、w3cバリデーターを介してスニペットを実行しましたが、同じ3つのエラーがあります。結局のところ、ページ速度がどのように問題を引き起こしているのか正確にはわかりません。

于 2012-08-02T17:37:21.913 に答える