2009-06-22 25 views
5

我正在开发一个严重依赖jQuery进行用户交互的应用程序。
(如果你的浏览器不支持jQuery,那么升级或不使用我的应用程序:)第1部分:jQuery - > MySQL - > jQuery - > HTML

正常情况下,有一个函数可以从表中获取,设置和删除数据。

在我的应用程序中,我GET'ing并设置了很多没有页面重新加载的信息。为此,我主要使用jQuery.post。

在我的JS文件的典型代码如下所示:

jQuery.post("mypath/jquery_getset_data.php", { instance: 'getItems_A', itemID: itemID_value}, 
    function(data) { 
    populateItemList(data); 
    }); 

jquery_getset_data.php包含许多如果声明:

if($_POST['instance'] == 'getItems_A'){ 
    // PHP code to get and process data from MySQL DB 
} 

if($_POST['instance'] == 'setItems_A'){ 
    // PHP code to process and insert data to MySQL DB 
} 

我的问题是:

  1. 对于JS文件和jquery_getset_data.php之间的交互是否更好?

  2. 如何在createStoreList中动态调用不同的“remove item”函数?见更新1

更新1: 这是我用它来创建许多不同的列表中的代码。

function createStoreList(data) 
    { 
    var ul = jQuery("<ul/>"); 

    // We need to build the html structure in order for this to be registered in DOM. 
    // If we don't, jQuery events like .click, .change etc. will not work.  
    for (var i = 0; i < data.length; i++) 
    { 
     ul.append(
     jQuery("<li/>") 
     .attr("id", "listItem_"+data[i].id) 
     .append(jQuery("<span/>") 
      .addClass("btnRemoveItem") 
      .attr("title", "Remove store from list") 
      .attr("id", data[i].id) 
      .click(function() { removeItemA(this); }) 
     ) 
     .append(data[i].name + ', ' + data[i].street) 
     );    
    } 
    return ul; 
    } 

更新2 我想我只可以使用switch语句。我测试过它,它工作。

.click(function() { 
     switch(instance) 
     { 
      case 'removeListItemA': removeListItemA(this); break; 
      case 'removeListItemA': removeListItemB(this); break; 
      case 'removeListItemA': removeListItemC(this); break; 
     } 
    }) 
+0

也许你应该发布“几乎相同的代码”的例子?顺便说一句,你违反了怪胎代码,不在你的笑脸附近嵌套parens:它应该阅读“或不使用我的应用程序:)):D:D – jrharshath 2009-06-22 10:12:58

+2

+1”如果你的浏览器不支持jQuery,那么升级或不使用我的应用程序“。 :-) – KyleFarris 2009-06-22 15:10:28

回答

1

我会改变的唯一事情是在jquery_getset_data.php我会用一个switch语句,而不是很多if语句。 jQuery的$ .post方法适用于你正在做的事情,使用其中一种GET ajax方法($ .load或$ .get)来影响数据库的脚本(删除/更新/等)会中断HTTP规范。

+0

是的,我正在考虑这样做。把我的代码片段变成函数,并从swtich语句中调用它们。 – Steven 2009-06-22 10:29:04

3

为了减少jquery_getset_data.php,我会使用OOP设计模式来避免切换和if语句。

class ICommand 
{ 
    public: 
      function execute(); 
}; 

class CommandGetItemA 
{ 
    public: 
      function execute() 
      { 
       //do some staff here 
      }; 
}; 

然后:

CommandsMap['getItemA'] = new CommandGetItemA(); 
CommandsMap['setItemA'] = new CommandGetItemB(); 
.... 

CommandsMap[ $_POST['instance']].execute(); 

我知道看起来很复杂,但对我的口味看起来好多了。 关于你的第二个问题,我不确定我是否理解,你可以添加更多的解释吗?

我看到你更新后,我觉得对于第二个问题,你可以这样做:

.click(function() { 
     window[instance](this); 
}); 

在那里,“实例”是函数的名称,也可以更新或追加其后者,使其成为功能名称;