Выполнение функций сервера и клиента со стороны клиента с помощью php и js

1

После того, как клиент нажимает кнопку - должна выполняться функция на стороне сервера, и в соответствии с результатом выполняются различные функции на стороне клиента.

Для этого я использовал AJAX и написал эту функцию:

function invoke_php(file_name, parameters){     
   parameters = typeof parameters !== 'undefined' ? parameters : '';
   var xmlhttp = new XMLHttpRequest();
   xmlhttp.onreadystatechange = function() {
       if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {             
           switch (xmlhttp.responseText) {
             case "func1":
                func1();
             break;
             case "func2":
                func2();
             break;
             default:
                default_func();
           } 
       }
   };
   xmlhttp.open("POST", file_name+"?"+parameters, true);
   xmlhttp.send();
}

Функциональность на стороне сервера выполняется в отдельном файле php, который возвращает имя запускаемой функции. функция invoke_php использует переключатель для текста ответа и выполняет подходящую клиентскую функцию...

Похоже, что есть лучший способ сделать это... Любое предложение по улучшению будет оценено.. :)

Теги:
client-server

1 ответ

1

Я бы рекомендовал вам:

  1. удалите корпус переключателя (который обычно неэффективен и, как правило, становится очень многословным)
  2. передать полный URL-адрес функции
  3. передайте список обратных вызовов функции, таким образом, вы не будете полагаться на глобальное определение обратных вызовов

Вот как выглядит код:

function invoke_php(url, callbacks){
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200 && callbacks) {
            var fn = callbacks[xmlhttp.responseText] || callbacks._default || function () {};
            fn();
        }
    };
    xmlhttp.open("POST", url, true);
    xmlhttp.send();
}

invoke_php(
    'test.php?myparams=true',
    {
        _default: function () {},
        func1: function () {
            console.log('func1');
        },
        func2: function () {
            console.log('func2');
        },
    }
);

Позвольте мне знать, если это помогает.

благодаря

Ещё вопросы

Сообщество Overcoder
Наверх
Меню