2009-06-22 65 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); 
}); 

在那裏,「實例」是函數的名稱,也可以更新或追加其後者,使其成爲功能名稱;