Часть 1: jQuery -> MySQL -> jQuery -> HTML

Я разрабатываю приложение, которое в значительной степени зависит от jQuery для взаимодействия с пользователем.
(и если вы браузер не поддерживает jQuery, обновите или не используйте мое приложение 🙂

Как обычно, есть функции для GET, SET и DELETE данных из таблицы.

В моем приложении я GET'ing и SET'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 :

 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? См. Обновление 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; } }) 

Чтобы уменьшить jquery_getset_data.php, я бы использовал шаблоны проектирования ООП, чтобы избежать переключений и операторов 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); }); 

Там «экземпляр» – это имя функции, или вы можете обновить или добавить его последним, чтобы оно стало именем функции;

Единственное, что я бы изменил, это jquery_getset_data.php Я бы использовал оператор switch вместо многих операторов if. Метод $ .post jQuery отлично подходит для того, что вы делаете, разговаривая со сценарием, который влияет на базу данных (удаляет / обновляет / etc), используя один из методов GET ajax ($ .load или $ .get), нарушает спецификацию HTTP.