Я разрабатываю приложение, которое в значительной степени зависит от 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 }
Вот мой вопрос:
Является ли лучший способ взаимодействия между файлом JS и jquery_getset_data.php?
Как я могу динамически вызывать разные функции «удалить элемент» внутри 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.