Изменить переменную PHP, используя JavaScript или AJAX на той же странице - PullRequest
0 голосов
/ 12 июня 2018

Я знаю, что этот вопрос задавался много раз, но я думаю, что в моем случае я имею дело с чем-то другим, или, лучше сказать, мне нужно что-то другое.

Я использую открытыйИсточник, который работает по предварительной записи, но, к сожалению, клиент может выбрать услугу, а не ее продолжительность.Я могу воссоздать один и тот же сервис, добавив его вручную несколько раз с разной продолжительностью минут, но таким образом в выпадающем меню будет присутствовать множество вариантов, и это не то, что я ищу в качестве обходного пути.

Итак, то, о чем я подумал, использовало выпадающий список для выбора времени и, основываясь на этом выборе, в выпадающем меню служб показывало бы ТОЛЬКО соответствующие значения, основанные на времени.Сайт выглядит следующим образом: site

Что я ищу, так это то, что всякий раз, когда я выбираю количество часов ... Я ТОЛЬКО ПОЛУЧАЮ услуги, которые являются частью этого часа, ине все из них.Я в порядке с использованием кнопки, которая обновляет страницу, насколько это работает, но я не могу создать другой файл, который затем перенаправляет сюда.

Это часть кода, заинтересованная в этом:

<select id="select-service" class="col-xs-12 col-sm-4 form-control">

<?php
    // Group services by category, only if there is at least one service with a parent category.
    $has_category = FALSE;
    foreach($available_services as $service) {
        if ($service['category_id'] != NULL) {
            $has_category = TRUE;
            break;
        }
    }

    if ($has_category) {
        $grouped_services = array();

        foreach($available_services as $service) {
            if ($service['category_name'] == '2 HOURS' || $service['category_name'] == '1 HOUR' || $service['category_name'] == '3 HOURS') {
                if (!isset($grouped_services[$service['category_name']])) {
                    $grouped_services[$service['category_name']] = array();
                }

                $grouped_services[$service['category_name']][] = $service;
            }

        }

        // We need the uncategorized services at the end of the list so
        // we will use another iteration only for the uncategorized services.
        $grouped_services['uncategorized'] = array();
        foreach($available_services as $service) {
            if ($service['category_id'] == NULL) {
                $grouped_services['uncategorized'][] = $service;
            }
        }

        foreach($grouped_services as $key => $group) {
            $group_label = ($key != 'uncategorized')
                    ? $group[0]['category_name'] : 'Uncategorized';

            if (count($group) > 0) {
                echo '<optgroup label="' . $group_label . '">';
                foreach($group as $service) {
                    echo '<option value="' . $service['id'] . '">'
                        . $service['name'] . '</option>';
                }
                echo '</optgroup>';
            }
        }
    }  else {
        foreach($available_services as $service) {
            echo '<option value="' . $service['id'] . '">' . $service['name'] . '</option>';
        }
    }
?>
                            </select>

1 Ответ

0 голосов
/ 16 июня 2018

Я использую только одну функцию AJAX для моей платформы.Ниже приведен минимальный пример:

function ajax(method,url,param_id_container_pos,id_container)
{
 var xhr = new XMLHttpRequest();
 xhr.open(method,url,true);

 xhr.onreadystatechange = function()
 {
  if (xhr.readyState=='4')
  {
   var type = xhr.getResponseHeader('content-type').split('/')[1];
   if (method=='post')
   {
    if (type=='json')
    {
     var j = JSON.parse(xhr.responseText);
     console.log(j);//Check your browser's developer network panel.
     eval(j.javascript);//eval is frowned upon though just use to call a sequel JS function.
    }
   }
  }
 }
}

//Example uses:
ajax('get','admin/?ajax=account','inside','id_target');

var fd = new FormData();
fd.append('ajax','admin_post_account_approval');
fd.append('parameter1',object1);
fd.append('parameter2',object2);
ajax('post',path+'admin/',fd);

Ваша цель - сделать ваш код минимальным и высоко , если это возможно, многократно используемым.

Что касается сервера и PHP, которые вам нужныпомнить: никогда не доверяй пользователю .Это означает, что вам нужно проверить все:

<?php
if (isset($_POST['ajax']) && $_POST['ajax']=='admin_post_account_approval')
{
 if (!isset($_POST['parameter1'])) {/*error_handling*/}
 else if (!isset($_POST['parameter1'])) {/*error_handling*/}
 else if (![condition not met]) {}
 else
 {
  if ([all conditions met])
  {
   header('Content-Type: application/json');
   $array = array('javascript'=>'alert(\'Just a JavaScript alert triggered by PHP.\');');
   die(json_encode($array));
  }
 }
}
?>

Код на стороне сервера, PHP следует рассматривать как реальную жизнь: всегда терпеть неудачу first и проверять условия на длину, правильные символы или неправильныесимволы в параметрах формы и т. д.

Кроме того, я настоятельно рекомендую, чтобы сервер отвечал JSON, как я обычно иллюстрировал в приведенном выше коде.Поскольку я пишу только свой собственный код и не работаю с кодом других людей, это скорее общий ответ, чем попытка нацелиться на любое программное обеспечение, с которым вы работаете.Независимо от того, включите ли вы отчеты об ошибках и обратите внимание на инструменты разработчика в любом браузере, который вы используете, вы попадете туда.Удачи.

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