Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 08.11.2008, 02:09
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Без кода проблемного места подсказать не получится.
Ответить с цитированием
  #22 (permalink)  
Старый 18.10.2009, 20:51
Новичок на форуме
Отправить личное сообщение для sergey_sergey Посмотреть профиль Найти все сообщения от sergey_sergey
 
Регистрация: 18.10.2009
Сообщений: 1

Закинул все три файла: index.php, district.js, district_select.php на сервер, в файле district_select.php изменил подключение к БД под свои данные, при запросе к базе district сменил на своё поле. Пока не работает... Что-то ещё нужно откорректировать? Спасибо.
Ответить с цитированием
  #23 (permalink)  
Старый 25.09.2010, 05:03
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А никто не подскажет - есть ли какойнибудь сервис, который по запросу страны выдает в xml или json области этой страны и города? Тот же могучий Google?
Ответить с цитированием
  #24 (permalink)  
Старый 25.09.2010, 06:17
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

пока нарыл это - http://ws.geonames.org/search?countr...ureCode=A DMD
выдает регионы России. Но нифига не на русском ((
И непонятно как запросить города отдельного региона. И желательно указать какую инфу хочу получить.
Ответить с цитированием
  #25 (permalink)  
Старый 25.09.2010, 12:13
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

danik.js,
вы ошиблись адресом
это форум по JS, а не поисковая система
введите пожалуйста в адресной строке http://google.ru/, и ищите там.
до свидания
Ответить с цитированием
  #26 (permalink)  
Старый 27.09.2010, 11:46
Кандидат Javascript-наук
Отправить личное сообщение для magistr_bender Посмотреть профиль Найти все сообщения от magistr_bender
 
Регистрация: 07.09.2008
Сообщений: 133

нет ну почему же.. это всётаки по теме...
у гугла есть такой инструмент
есть даже реализация твоей задачи на jQuery плагин называется geo-autocomplete
http://code.google.com/p/geo-autocomplete/
Ответить с цитированием
  #27 (permalink)  
Старый 18.08.2017, 10:39
Новичок на форуме
Отправить личное сообщение для griga Посмотреть профиль Найти все сообщения от griga
 
Регистрация: 18.08.2017
Сообщений: 8

Проблема с имплементацией
Пытаюсь адаптировать ваш код под себя, но столкнулся с проблемой:
Браузер показывает следующую ошибку:
"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 я полный новичек...
Ответить с цитированием
  #28 (permalink)  
Старый 18.08.2017, 11:29
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

griga, перед строкой
var Subcategories = eval("("+HTTPReq.responseText+")");

Добавь это:
console.log(HTTPReq.responseText);

После открой консоль и посмотри, что возвращает сервер.
Там наверняка HTML-код найдется.
Ответить с цитированием
  #29 (permalink)  
Старый 18.08.2017, 11:44
Новичок на форуме
Отправить личное сообщение для griga Посмотреть профиль Найти все сообщения от griga
 
Регистрация: 18.08.2017
Сообщений: 8

была проблема с подключением конфига 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, 18.08.2017 в 12:01.
Ответить с цитированием
  #30 (permalink)  
Старый 18.08.2017, 12:09
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

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/

Последний раз редактировалось Nexus, 18.08.2017 в 12:17.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск