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

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

Чтобы добиться этого, я использовал 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 использует переключение текста ответа и выполняет подходящую функцию на стороне клиента …

Такое чувство, что есть лучший способ сделать это …. Любое предложение по улучшению будет оценено .. 🙂

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');
},
}
);

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

Спасибо

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector