为每个jQuery调用创建新类是最佳做法吗?

时间:2011-10-08 12:06:06

标签: php jquery

我有一个目录树结构。每次单击文件夹时,jQuery.ajax都会触发并打开jquery.php文件。

这是我的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;
}   
?>

我的问题是:每次点击都需要触发此功能吗? 或者我可以触发一次然后在同一个用户会话中调用各种函数吗?

2 个答案:

答案 0 :(得分:1)

您所做的每个Ajax请求都会在服务器端产生新的请求。

在PHP中初始化每个请求的类和配置变量是正常的,因此您显示的方式很好并且尝试在请求中保留jQueryFactory对象并不值得追求。它也不应该是一个性能问题。

如果这个过程确实需要加速,请查看opcode caching.

等内容

答案 1 :(得分:0)

可以将$factory存储在$_SESSION变量中吗?

也许是这样的? (未经测试,我对jQueryFactory不熟悉)

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

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