Часть 1: jQuery -> MySQL -> jQuery -> HTML - PullRequest
5 голосов
/ 22 июня 2009

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

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

В моем приложении я ПОЛУЧУ и УСТАНАВЛИВАЮ много информации без перезагрузки страницы. Для этого я в основном использую 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? Смотрите обновление 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;
        }
    })

Ответы [ 2 ]

3 голосов
/ 22 июня 2009

Чтобы уменьшить 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);   
});

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

1 голос
/ 22 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...