0

私は完全にajaxに基づいたWebアプリケーションに取り組んでいます。2 つの主要なセクションがあります。左パネルにはリンクがあります。リンクがクリックされると、右側のパネルのコンテンツが ajax を介して動的に読み込まれます。ajax 呼び出しは、html と javascript の両方を含む json エンコードされた応答を返します。サンプルの page1.php ファイルを次に示します。

$output=array();

ob_start();
include("page1html.php");
$output['html']=ob_get_clean();

ob_start();
include("page1script.php"); //page1script.php return the page specific script
$output['script']=ob_get_clean();

echo json_encode($output);

ここにサンプルpage1script.phpがあります

<script>
    ajaxscript = {   //namespace
        init: function () {
        },
        foo: function () {
        }
    };
</script>

他のページも同じスタイルですが、html とスクリプトが異なります。(そのため、大きなファイルになるため、グローバルjsファイルを作成していません..ページ固有のjsのみをロードしたい)。

//this is onclick of link
updatecontents("page1.php");  ...
updatecontents("page2.php"); and so on

これが私のjsです

var xhr;
var ajaxscript = null;

function updatecontents(addrs) {
    if(xhr) xhr.abort();
    $('#mainpanel').html('<div class="loader"></div>');
    $('#ajscript').html('');
    ajaxscript = {};    //remove the previous functions in the namespace; This is where I cleanup the old functions

    xhr=$.ajax({
        url: addrs,
        dataType : 'json',
        success: function(response) {
            if(response.html)
                $('#mainpanel').html(response.html);
            if(response.script)
                $('#ajscript').html(response.script);

            if(typeof(ajaxscript.init)=='function') ajaxscript.init();
        },
        error: function () {}
    });
}

これは私が達成できる最高のものです...しかし、リンクをクリックするたびに成長するFirefoxのfirebugスクリプトタブ: js//eval/seq/ の下のリストが増えていることに気付きました。これにより、リンクをクリックするたびにスクリプトがメモリに読み込まれ、ブラウザのキャッシュに残っているように感じます. 私が正しい道を進んでいるかどうか、またはどのような最適化が必要かについて、専門家の意見を聞きたいです。

4

2 に答える 2

0

私はほぼ同じ問題を抱えています。私にとっては、divを更新するとリンクをナビゲートできません。持ってる。ajax-success では、html の代わりに .load を使用する必要があると思います

于 2013-03-29T06:03:00.253 に答える
0

.ajax の代わりに .load を使用してコンテンツをロードすることは、適切なソリューションです。データはブラウザにキャッシュされます。ただし、結果 (html と js を含む) が大きい場合、js コンテンツが html コンテンツをブロックする可能性があります。したがって、私のアドバイスは、なぜ js コンテンツを PHP のファイルに書き込んで、その js ファイルの URL だけを返さないのかということです。

于 2013-03-29T06:27:01.393 に答える