Php 为每个jQuery调用创建新类是最佳实践吗?

Php 为每个jQuery调用创建新类是最佳实践吗?,php,jquery,Php,Jquery,我有一个目录树结构。每次单击文件夹时,jQuery.ajax都会激发并打开一个jQuery.php文件 这是触发jQuery.ajax的javascript代码: jQuery('.directory').live('click',function() { // Get dir name clicked var dir = jQuery(this).find('span').html(); // Update dir list getHTML('getDi

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

这是触发jQuery.ajax的javascript代码:

  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;
}   
?>

我的问题是:每次单击都必须启动此功能吗?
或者我可以启动一次,然后在同一个用户会话中调用不同的函数吗?

您可以将
$factory
存储在
$\u会话
变量中吗

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


您发出的每个Ajax请求都会在服务器端产生一个新的请求

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


如果这个过程真的需要加快,那就研究一下类似于

的事情,不确定你的意思。
jQueryFactory
做什么?你是说在PHP中跨多个Ajax调用持久化变量吗?@Pekka-我想在浏览树结构时持久化
jQueryFactory
。但我不确定这是否可能?因为对象在脚本执行结束时死亡,不,你所寻找的是不可能的。@rodneyrehm,这就是我想知道的。谢谢:)
jQueryFactory
扩展了
FileBrowser
,它有一个包含根目录路径的变量。我认为暴露这将是一个安全漏洞。@Steven在会话中存储东西(不像在cookie中)不会向客户端暴露任何东西,所以这不会是一个问题。但这两种方式都可能没有意义-您必须在每个请求上加载bluepring for
jQueryFactory
,因此将对象存储在会话变量中的优势不会带来任何好处。
session_start();
$factory = isset($_SESSION["factory"]) ? $_SESSION["factory"] : makeNewFactory();

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