Как вставить раскрывающийся список PHP на страницу HTML/Javascript

Хорошо, это мой второй пост, и ПОЖАЛУЙСТА, примите, что я полный новичок, желающий учиться, провожу много часов, блуждая по разным сайтам в поисках ответов, и я почти добрался до того места, где мне нужно быть (по крайней мере, для этого немного) .

У меня есть веб-страница, на которой есть несколько функций javascript, которые работают вместе для создания карты Google с различными линиями и т. д. с использованием API карт Google.

У меня также есть база данных MySQL с некоторой информацией. Я создал PHP-скрипт для динамического создания раскрывающегося списка с информацией из базы данных. (и этот бит, кажется, работает нормально) - http://www.bournvilleconservatives.com/temp/select.php

Теперь мне нужно сделать так, чтобы этот раскрывающийся список отображался на странице HTML/Javascript, которая у меня уже есть, чтобы, когда пользователь выбирает что-то из списка, он вызывал функцию javascript с выбранным значением.

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

Я бы поместил PHP на html-страницу, но эта страница на самом деле обернута в Joomla! обертка, так что все довольно сложно.

Заранее спасибо.


person Rob Sealey    schedule 17.03.2011    source источник
comment
какую библиотеку javascript вы используете? в.. Joomla? Вы можете отказаться от этого для вызова ajax, не слишком пачкая руки в JS.   -  person Jakub    schedule 17.03.2011
comment
Это был первый вопрос: stackoverflow.com/questions/5338092/   -  person kapa    schedule 17.03.2011
comment
Нет такой вещи, как раскрывающийся список PHP;)   -  person ThiefMaster    schedule 18.03.2011


Ответы (3)


решение jQuery

Если вы хотите использовать jQuery, это очень поможет вам с доступом к DOM, вызовами Ajax и прочим. Позвольте мне дать вам решение в jQuery:

Во-первых, поместите div в HTML (это сохранит ваше поле выбора):

<div id="i_want_my_select_here"></div>

Затем поместите этот код в конец вашего HTML-кода перед </body>.

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript">
  $(document).ready(function() {
    $('#i_want_my_select_here').load('/temp/select.php');
  });
</script>

В первый тег script мы включаем библиотеку jQuery из CDN Google. Во втором мы пишем наш код Javascript/jQuery. Функция .load() упрощает вызов Ajax и загрузку ответа в элемент HTML.

Вы можете видеть, что это намного проще, чем весь этот код в моем другом ответе :).

person kapa    schedule 18.03.2011
comment
Это правда, ты Бог! Это работает (почти) отлично. Он переносит поле выбора на страницу именно там, где мне это нужно, со значениями из базы данных. Самая последняя часть (и тогда я обещаю оставить вас в покое (до следующего раза)) - это .... глупый вопрос 463, как мне заставить его запустить функцию javascript, передающую значение выбранного элемента из списка. Нужно ли это делать в php, или в html/javascript/jquery. Функция javascript, очевидно, находится на странице html/javascript, на которую мы перенесли раскрывающийся список. Еще раз спасибо. (используется опция jQuery) - person Rob Sealey; 18.03.2011
comment
Вы хотите выполнить jquery после завершения функции загрузки (поэтому вам нужно использовать обратный вызов в функции загрузки). Вы должны прикрепить обработчик события изменения к выбранному элементу. - person kapa; 18.03.2011

Если вы используете prototype, вы можете использовать либо Ajax.Request или Ajax.Updater, хотя у вас должен быть родительский div, в который можно заменить/вставить.

Пример с запросом:

new Ajax.Request('select.php', {
  method: 'post',
  onSuccess: function(r) {
    var select = r.responseText;
    $('parent_div').update(select);
  }
});

Пример с программой обновления:

new Ajax.Request('parent_div', 'select.php', { method: 'post' });
person Stephen Walcher    schedule 17.03.2011
comment
Кстати, вам не обязательно использовать method: post. Метод по умолчанию — «получить», я просто использую POST по привычке. - person Stephen Walcher; 17.03.2011

Во-первых, пример Ajax (взят с сайта tizag.com и изменен), код Javascript приходит:

var ajaxRequest;  // The variable that we will put an XMLHTTPRequest object in

//We try to create an XMLHTTPRequest object, 
//it is the object that lets us use Ajax

try{
    // Opera 8.0+, Firefox, Safari
    ajaxRequest = new XMLHttpRequest();
} catch (e){
    // Internet Explorer Browsers
    try{
        ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try{
            ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e){
            // Something went wrong
            alert("Your browser broke!");
            return false;
        }
    }
}

// Create a function that will receive data sent from the server
// and do stuff with it (this function will only run, 
// when the data arrives back from the server!)
ajaxRequest.onreadystatechange = function(){
    if(ajaxRequest.readyState == 4){ //if request is successful
           //HERE COMES THE DOM INSERTION
    }
}

//We call the PHP file
ajaxRequest.open("GET", "/temp/select.php", true);
ajaxRequest.send(null); 

Что в основном произошло, так это то, что через XMLHTTPRequest мы вызвали ваш файл PHP. Когда придет ответ (вывод файла PHP), ajaxRequest.onreadystatechange запустится мгновенно. Итак, что бы мы ни хотели сделать с полученными данными, мы должны сделать это в том месте, которое я написал //HERE COMES THE DOM INSERTION.

Мы хотим вставить вывод в HTML. Чтобы выбрать самый простой путь, сначала создайте div/span в своем HTML именно в том месте, где вы хотите, чтобы ваш выбор отображался (очень важно определить идентификатор).

<div id="i_want_my_select_here"></div>

Опять же, здесь появляется Javascript, который заменяет //HERE COMES THE DOM INSERTION.

//use the id to get Javascript access to the DIV
var div=document.getElementById('i_want_my_select_here');
//put the output of PHP into the div
div.innerHTML=ajaxRequest.responseText;
person kapa    schedule 18.03.2011