2011-10-08 43 views
2

我有一個目錄樹結構。每次點擊一個文件夾,jQuery.ajax就會啓動並打開一個jquery.php文件。爲每個jQuery調用創建新類是否是最佳實踐?

這是我的javascript代碼觸發jQuery.ajax:

jQuery('.directory').live('click',function() { 

    // Get dir name clicked 
    var dir = jQuery(this).find('span').html(); 

    // Update dir list 
    getHTML('getDirList',dir, function(html){ 
     jQuery('#fileDirList').html(html); 
    }); 

    // Update file list 
    getHTML('getRowList',dir, function(html){ 
     jQuery('#fileList').html(html); 
    });   
    }); 

    function getHTML(instance, dir, callback) { 
     jQuery.ajax({ 
      type: "POST", 
      url: "../wp-content/plugins/wp-filebrowser/jquery.php", 
      dataType: 'html', 
      data: {instance: instance, dir: dir}, 
      success: function(html){ 
       callback(html); 
      }, 
      error: function(e) { 
      callback('[Error] ' + e); 
      } 
     }); 
    } 

在這個文件中,我有以下的代碼在我jQuery.php文件:

<?php 

    class jQueryFactory { 

    /** 
    * Get and output directory list 
    */ 
    public function getDirList() { 
    echo parent::getDirList(); 
    } 


    /** 
    * Get images and list them in row format 
    */ 
    public function getRowList() { 
    echo parent::getRowList(); 
    } 


    /** 
    * Create new directory 
    */ 
    function createDir() { 
    if(isset($_POST['new_dir'])) { 
     $result = parent::createDir($_POST['new_dir']); 
     echo $result; 
    } 
    } 


    /** 
    * Delete file 
    */ 
    function deleteFile() { 
    if(isset($_POST['file'])) { 
     $file = $_POST['file']; 
     parent::deleteImage($file); 
    } 
    } 
} 

// Does this work? 
if(!isset($factory)) 
    $factory = new jQueryFactory(); 

switch($_POST['instance']) { 
    case 'deleteImage' : $factory->deleteFile(); break; 
    case 'createDir'  : $factory->createDir(); break; 
    case 'getDirList'  : $factory->getDirList($dir); break; 
    case 'getRowList'  : $factory->getRowList($dir); break; 
} 
?> 

我的問題是:每次點擊都必須觸發此功能嗎? 或者我可以觸發一次,然後在相同的用戶會話中調用各種功能?

+0

不知道你的意思。 'jQueryFactory'做什麼?你是說在多個Ajax調用中使用PHP來保存變量嗎? –

+0

@Pekka - 當我導航樹結構時,我想堅持'jQueryFactory'。但我不確定這是否可能? – Steven

+1

隨着對象在腳本執行結束時死亡,不,您尋找的內容是不可能的。 – rodneyrehm

回答

1

你所做的每一個Ajax請求會導致服務器端的一個新的請求。

在PHP中初始化每個請求的類和配置變量是很正常的,所以你展現的方式很好,並且試圖在請求間持久保留jQueryFactory對象並不值得追求。它也不應該是一個性能問題。

如果進程確實需要加快,看看之類的東西opcode caching.

0

你能存儲$factory$_SESSION變量嗎?

也許是這樣的? (未經測試,我不熟悉jQueryFactory)

session_start(); 
$factory = isset($_SESSION["factory"]) ? $_SESSION["factory"] : makeNewFactory(); 

function makeNewFactory() { 
    $fact = new jQueryFactory(); 
    $_SESSION["factory"] = $fact; 
    return $fact; 
} 
+0

'jQueryFactory'擴展了'FileBrowser',它有一個包含根目錄路徑的變量。我認爲揭露這將是一個安全漏洞。 – Steven

+0

@Steven在會話中存儲東西(與Cookie不同)不會將任何內容暴露給客戶端,所以這不會成爲問題。但是這可能不會有任何意義 - 無論如何,每次請求都必須加載「jQueryFactory」的藍圖,因此將對象存儲在會話變量中的好處不會帶來任何好處。 –