Intereting Posts
multibyte strtr () -> mb_strtr () warning: stream_socket_client (): невозможно установить файл закрытого ключа Нужна помощь в вычислении MySQL-запроса для подсчета, если определенное число PHP, как получить случайное число, отличное от значений массива Добавление изображения в pdf с помощью pdftk php :: сколько времени осталось до tmp-файлов? Преобразование массива в массив в строку возможно ..? API PHP для Google Analytics laravel query php как получить максимальное значение в пределах диапазона Kohana v3.1.0 ORM _ignored_columns – теперь, когда он ушел, что мне делать вместо этого? Как сделать совпадение символов в точках с использованием регулярных выражений как анализировать данные json с javascript на php PHP: Adobe Reader не может открыть PDF-файлы, созданные с помощью mpdf PHP-файл не может восстанавливать переменную сеанса на разных страницах Как отправить пользователя на наш веб-сайт, если он откажется от приложения Twitter?

запустить php-функцию с помощью ajax для обновления переменной шаблона phpBB

ПРИМЕЧАНИЕ. Здесь много деталей, поэтому, если кому-то нужна сжатая версия, я с удовольствием подведу итог.

Я пытаюсь запустить функцию в моем php-файле, который, в свою очередь, обновит шаблонную переменную. В качестве примера, вот одна из таких функций:

function get_vehicle_makes() { $sql = 'SELECT DISTINCT make FROM phpbb_vehicles WHERE year = ' . $select_vehicle_year; $result = $db->sql_query($sql); while($row = $db->sql_fetchrow($result)) { $template->assign_block_vars('vehicle_makes', array( 'MAKE' => $row['make'], )); } $db->sql_freeresult($result); } 

Я знаю, что эта функция работает. Я пытаюсь получить доступ к этой функции в своем Javascript с помощью:

 function updateMakes(pageLoaded) { var yearSelect = document.getElementById("vehicle_year"); var makeSelect = document.getElementById("vehicle_make"); var modelSelect = document.getElementById("vehicle_model"); $('#vehicle_make').html(''); $.ajax({ url: '/posting.php', data: {action: 'get_vehicle_makes'}, type: 'post', success:function(result)//we got the response { alert(result); }, error:function(exception){alert('Exception:'+exception);} }); <!-- BEGIN vehicle_makes --> var option = document.createElement("option"); option.text = ('{vehicle_makes.MAKE}'); makeSelect.add(option); <!-- END vehicle_makes --> if(pageLoaded){ makeSelect.value='{VEHICLE_MAKE}{DRAFT_VEHICLE_MAKE}'; updateModels(true); }else{ makeSelect.selectedIndex = -1; updateModels(false); } } 

Раздел в моем javascript

 <!-- BEGIN vehicle_makes --> var option = document.createElement("option"); option.text = ('{vehicle_makes.MAKE}'); makeSelect.add(option); <!-- END vehicle_makes --> 

… является блочным циклом и будет проходить через блок-переменную, vehicle_makes, установленную в функции PHP. Это работает при загрузке страницы, потому что загружаемая страница – это new.php, который я пытаюсь выполнить для вызова Ajax, и все PHP запускается в этом файле при загрузке. Однако мне нужно снова запустить эту функцию, чтобы обновить эту блочную переменную, так как она изменится в зависимости от изменения выбора в HTML. Я не знаю, является ли этот тип блочного цикла распространенным. Я узнаю о них, так как они используются с форумом, который я установил на моем сайте, phpBB. (Я смотрел в их форумах поддержки для помощи на этом.). Я думаю, что еще одним возможным решением было бы вернуть массив, но я хотел бы придерживаться блок-переменной, если возможно, ради последовательности.

Это бит кода в php, который читает $ _POST и вызывает функцию php:

 if(isset($_POST['action']) && !empty($_POST['action'])) { $action = $_POST['action']; //Get vehicle vars - $select_vehicle_model is used right now, but what the heck. $select_vehicle_year = utf8_normalize_nfc(request_var('vehicle_year', '', true)); $select_vehicle_make = utf8_normalize_nfc(request_var('vehicle_make', '', true)); $select_vehicle_model = utf8_normalize_nfc(request_var('vehicle_model', '', true)); switch($action) { case 'get_vehicle_makes' : get_vehicle_makes(); break; case 'get_vehicle_models' : get_vehicle_models(); break; // ...etc... } } 

И это javascript для запуска Ajax:

 function updateMakes(pageLoaded) { var yearSelect = document.getElementById("vehicle_year"); var makeSelect = document.getElementById("vehicle_make"); var modelSelect = document.getElementById("vehicle_model"); $('#vehicle_make').html(''); $.ajax({ url: '/posting.php', data: {action: 'get_vehicle_makes'}, type: 'post', success:function(result)//we got the response { alert(result); }, error:function(exception){alert('Exception:'+exception);} }); <!-- BEGIN vehicle_makes --> var option = document.createElement("option"); option.text = ('{vehicle_makes.MAKE}'); makeSelect.add(option); <!-- END vehicle_makes --> if(pageLoaded){ makeSelect.value='{VEHICLE_MAKE}{DRAFT_VEHICLE_MAKE}'; updateModels(true); }else{ makeSelect.selectedIndex = -1; updateModels(false); } } 

Javascript будет запущен, и ajax будет успешным. Я проверил вкладку сети и вкладку консоли и сделал несколько тестов, чтобы подтвердить это. Похоже, что переменная блока не задана. Является ли то, что я пытаюсь сделать, даже возможно? У меня есть ощущение, что для получения этого ответа нам нужно будет узнать больше о механизмах шаблонов phpBB и о том, как он работает с этой переменной шаблона. Кроме того, просто для уточнения, я думаю, что термин «переменная шаблона» специфичен для phpBB. Это термин, который они используют для переменных, заданных в PHP, для доступа к файлам HTML и javascript. Это работает через класс phpBB под названием «шаблон» и функцию «assign_block_vars». Я точно не знаю, как это работает.

Если бы кто-то сделал это для phpBB или имел какие-то идеи, я был бы признателен.

Solutions Collecting From Web of "запустить php-функцию с помощью ajax для обновления переменной шаблона phpBB"

Думаю, я нашел проблему. В начале моего PHP у меня есть оператор include, содержащий PHP-файл, содержащий класс для подключения к базе данных. В выражении $result = $db->sql_query($sql); , $db устанавливается в этом другом файле PHP. Я не совсем понимаю, но из-за этого $db был вне сферы моей функции get_vehicle_makes() . Мне пришлось создать класс внутри моего PHP-файла и передать $db в качестве параметра функции, используя:

 class vehicle { public function __construct($db) { $this->db = $db; } function get_vehicle_makes() { $sql = 'SELECT make FROM phpbb_vehicles WHERE year = ' . $select_vehicle_year; $result = $this->db->sql_query($sql); 

Надеюсь это поможет.