Без кода проблемного места подсказать не получится.
|
Закинул все три файла: index.php, district.js, district_select.php на сервер, в файле district_select.php изменил подключение к БД под свои данные, при запросе к базе district сменил на своё поле. Пока не работает... Что-то ещё нужно откорректировать? Спасибо.
|
А никто не подскажет - есть ли какойнибудь сервис, который по запросу страны выдает в xml или json области этой страны и города? Тот же могучий Google?
|
пока нарыл это - http://ws.geonames.org/search?countr...ureCode=A DMD
выдает регионы России. Но нифига не на русском (( И непонятно как запросить города отдельного региона. И желательно указать какую инфу хочу получить. |
danik.js,
вы ошиблись адресом это форум по JS, а не поисковая система введите пожалуйста в адресной строке http://google.ru/, и ищите там. до свидания |
нет ну почему же.. это всётаки по теме...
у гугла есть такой инструмент есть даже реализация твоей задачи на jQuery плагин называется geo-autocomplete http://code.google.com/p/geo-autocomplete/ |
Проблема с имплементацией
Пытаюсь адаптировать ваш код под себя, но столкнулся с проблемой:
Браузер показывает следующую ошибку: "VM3395:1 Uncaught SyntaxError: Unexpected token < at XMLHttpRequest.HTTPReq.onreadystatechange" Ошибка возникает на этой строке скрипта: var Subcategories = eval("("+HTTPReq.responseText+")"); Мой файл с формой:
<?php include('head.php');
// Список категорий
$sql_cat = "SELECT DISTINCT category FROM expenses_cat";
$result_cat = $conn->query($sql_cat);
while($row_cat = $result_cat->fetch_assoc()) {
$category[] = $row_cat['category'];
} ?>
<form action="/scripts/add_expenses.php" method="post" name="add_expenses">
<fieldset>
<div class="row">
<label for="category">Категория*:</label>
<select name="category" required onchange="loadList(this)">
<option value="" selected="selected"></option>
<?php foreach ($category as $KEY => $category) { echo '<option value="' . $category . '">' . $category . '</option>' . "\n"; } ?>
</select>
</div>
<div class="row">
<label for="subcategory">Подкатегория*:</label>
<select name="subcategory" id="subcatList" disabled="disabled" required>
</select>
</div>
</fieldset>
<div class="button"><input id="button" type="submit" value="Добавить запись" /></div>
</form>
<script>
// Создаём объект асинхронной загрузки с сервера.
var HTTPReq = XMLHttpRequest ?
new XMLHttpRequest() :
new ActiveXObject("Microsoft.XMLHTTP");
// Устанавливаем обработчик ответа от сервера:
HTTPReq.onreadystatechange = function()
{
// Если загружено полностью:
if(HTTPReq.readyState == 4)
{
// Обрабатываем ответ:
var Subcategories = eval("("+HTTPReq.responseText+")");
// Заполняем список:
fillSubcatList(Subcategories);
}
}
// Запоминаем выбранную страну, чтоб не
// дублировать запросы в будущем.
var selectedCategory = null;
// Функция, вызываемая при изменении списка
// (при выборе страны)
function loadList(categoryList)
{
// Если выбран "пустой" вариант - очищаем список:
if(categoryList.value === "")
{
clearSubcatList();
return;
}
// Проверяем выбрана ли уже какая-то страна:
if(selectedCategory !== null)
{
// Если выбрана, проверяем не текущая ли выбрана:
if(selectedCategory == categoryList.value)
{
// Если текущая уже выбрана - делать нечего.
return;
}
}
// Если никакая не выбрана, или выбрана не текущая, ставим текущую.
selectedCategory = categoryList.value;
// Далее запрашиваем сервер на предмет списка городов выбранной страны.
// Тут должна быть ваша страница php, её работа будет описана далее:
HTTPReq.open("GET", "page.php?category="+categoryList.value);
HTTPReq.send(null);
// После этого будет вызван обработчик (который мы писали ранее, так что выходим)
return true;
}
// Фукнция, которая добавляет элементы в список подкатегорий:
function fillSubcatList(elements)
{
// elements передан в формате JSON, так что щас он - объект
// для начала очистим текущий список подкатегорий
clearSubcatList();
// Уберём статус неактивен с элемента:
var subcatList = document.getElementById("subcatList");
subcatList.disabled = false;
// Скидываем счётчик option'ов (1 - потому что первый элемент пуст)
var i = 1;
// Рассмотрим elements, в котором ключи это values, а значения - имена.
for(var key in elements)
{
// Создаём и добавляем элемент в список:
var Subcategory = new Option(elements[key], key, false, false);
subcatList.options[i++] = Subcategory;
}
// Всё.
return true;
}
// Функция, которая очищает все элементы из второго списка:
function clearSubcatList()
{
var subcatList = document.getElementById("subcatList");
// Такое очищение, походу, работает во всех браузерах нормально.
while (subcatList.length > 0) subcatList.options[0] = null;
subcatList.options[0] = new Option('', 0, false, false);
// Установим его в неактивный
subcatList.disabled = "disabled";
}
</script>
Файл-обработчик page.php в той же папке:
<?php
if(!array_key_exists('category', $_GET)) die();
include('/scripts/connect.php');
$query = "SELECT id, subcategory FROM expenses_cat WHERE category='" . $_GET['category'] . "' AND inmenu = 1";
$result = $conn->query($query);
$output = array();
while($row = $result->fetch_assoc())
{
$output[] = '"'.addslashes($row['id']).'": "'.
'"'.addslashes($row['subcategory']).'"';
}
if(sizeof($output) > 0)
{
echo '{'. implode(',', $output) .'}';
}
?>
Файл connect.php (с ним проблем нет)
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "u177653819_reg";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
?>
Буду благодарен за помощь, в javascript я полный новичек... |
griga, перед строкой
var Subcategories = eval("("+HTTPReq.responseText+")");
Добавь это: console.log(HTTPReq.responseText); После открой консоль и посмотри, что возвращает сервер. Там наверняка HTML-код найдется. |
была проблема с подключением конфига connect.php
Убрал "/" и эта ошибка исчезла Но в целом проблему это не решило(( Ругается на ту же строку:
var Subcategories = eval("("+HTTPReq.responseText+")");
Но теперь ошибка следующая:
Uncaught SyntaxError: Unexpected token )
at XMLHttpRequest.HTTPReq.onreadystatechange
Все скобки в файле page.php вроде сходятся... UPD. В целях проверки заменил переменную $_GET['category'] на одно из значений category и запустил как отдельный файл. Команда
echo '{'. implode(',', $output) .'}';
дает результат в таком формате:
{"9": ""Значение1","14": ""Значение2","16": ""ЗначениеN"}
|
griga, у тебя json не валидный получается.
в файле page.php смени содержимое на это:
<?php
if(!array_key_exists('category', $_GET)) die();
include('/scripts/connect.php');
$category=$conn->real_escape_string($_GET['category']);
$query = "SELECT id, subcategory FROM expenses_cat WHERE category='".$category."' AND inmenu = 1";
$result = $conn->query($query);
$output = array();
while($row=$result->fetch_assoc()){
$output[]=array(
$row['id']=>addslashes($row['subcategory'])
);
};
echo json_encode($output);
exit;
А строку с чтением категорий из ответа замени этим: var Subcategories=JSON.parse(HTTPReq.responseText); PS. Рекомендую почитать статьи про SQL-инъекции, как минимум. Статей по этой теме полно, вот первая попавшаяся: https://habrahabr.ru/post/148151/ |
| Часовой пояс GMT +3, время: 04:27. |