зависимые списки select 
		
		
		
		Добрый вечер! Пытаюсь сделать зависимые списки select и видимо где-то ошибка. Так как я только разбираюсь в ajax, не могу понять где она. Помогите, пожалуйста. Мне кажется, что ошибка где-то в запросе, т.к. при выборе категории выходит alert "При выполнении запроса произошла ошибка " Но что именно не так с запросом? Заранее благодарю за помощь! 
	Сам запрос 
$tip = $mysqli->query("SELECT *
            FROM  `tip`
            WHERE  `id_kat` =  '".$_POST['kat_id']."'");       
        $arr = array();
        while($row = mysqli_fetch_assoc($tip)){
           $arr[] = array($row['tid'] => $row['tname']);
        }
        return $arr;
    
 
if (!isset($_POST['query']) || !$_POST['query']) {
    exit("Нет данных определяющих тип запроса");
}
else {
    
    $query = trim($_POST['query']); 
    // Определяем тип запроса
    switch($query) {
    case 'getTip':  
        // Формируем массив с ответом
        
        $result = NULL;
        $i = 0;
        foreach ($arr as $tip_id => $tip) {
            $result[$i]['tip_id'] = $tip_id;
            $result[$i]['tip'] = $tip;
            $i++;
        }
        
    break;
    
    default:
        // Если данные не определены
        $result = NULL;
    break;
    }
}
(function () {    
    "use strict"; 
    jQuery(function () {        
        $( '#kat' ).change(function () {            
            $( '#tip').find( 'option:not(:first)' ) 
                .remove()                   
                .end()      
                .prop( 'disabled',true );             
            var kat_id = $( this ).val();            
            if (kat_id == 0) { return; }            
            $.ajax({
                type: "POST",   
                url: "query.php",   
                dataType: "json",   
                data: "query=getTip&kat_id=" + kat_id,  
                error: function () {    
                    alert( "При выполнении запроса произошла ошибка :(" );  
                },
                success: function ( data ) {                    
                    for ( var i = 0; i < data.length; i++ ) {                        
                        $( '#tip' ).append( '<option value="' + data[i].tip_id + '">' + data[i].tip + '</option>' );
                    }
                    $( '#tip' ).prop( 'disabled', false );  
                }
            });
        });
    }); 
})();
 | 
	
		
 Данные до сервера доходят? Сервер возвращает корректный JSON? Путь до php скрипта корректно в запросе указан? 
	 | 
	
		
 А как узнать доходят ли данные до сервера?  
	Путь до PHP скрипта это тот что в параметре "data" указан? Вопросы у меня, наверно, глупые, но я сосем не знакома ни с ajax ни с javascript, только пытаюсь разобраться во всем этом. Поэтому параметр "data" не уверена, что правильно написан. Запрос на PHP проверяла, он работает.  | 
	
		
 Цитата: 
	
 Цитата: 
	
 Еще у вас указан dataType: "json", а это значит, что php скрипт должен возвращать данные в формате JSON, если он вернет данные в другом формате, то будет ошибка при попытке распарсить эти данные.  | 
	
		
 query.php есть, в конце файла данные преобразуются в формат json, так что с этим тоже должно быть все в порядке. Попробую проверить, доходят ли данные до сервера 
	 | 
	
		
 И сделайте вывод ошибки на стороне клиента так: 
	
error: function (xhr, status, error) {    
  alert( status + ' | ' + error );  
}
И скажите что оно у вас там выводит.  | 
	
		
 parsererror | SyntaxError: Unexpected end of input 
	Я так понимаю, что что-то с запросом PHP не так?  | 
	
		
 Цитата: 
	
  | 
	
		
 не знаю, еще не проверила. не могу понять, как именно формат проверить 
	 | 
	
		
 Цитата: 
	
 
$.ajax({
                type: "POST",   
                url: "query.php",   
                dataType: "text",   
                data: "query=getTip&kat_id=" + kat_id,  
                error: function () {    
                    alert( "При выполнении запроса произошла ошибка :(" );  
                },
                success: function ( data ) {                    
                    alert(data) 
                }
});
И посмотрите что там у вас сервера приходит.  | 
	
		
 пустой алерт выводит 
	 | 
	
		
 Ну значит ваш php скрипт ничего не возвращает. Где у вас там вывод данных то? В том коде, который вы приводили в первом посте я не вижу где данные там выводятся. 
	 | 
	
		
 у меня что-то с массивом, данные в массив из бд заводит, а из массива не выводит 
	 | 
	
		
 $tip = $mysqli->query("SELECT * 
	FROM `tip` WHERE `id_kat` = '".$_POST['kat_id']."'"); $arr = array(); while($row = mysqli_fetch_assoc($tip)){ $arr[] = array($row['tid'] => $row['tname']); } return $arr; if (!isset($_POST['query']) || !$_POST['query']) { exit("Нет данных определяющих тип запроса"); } else { $query = trim($_POST['query']); // Определяем тип запроса switch($query) { case 'getTip': // Формируем массив с ответом $result = NULL; $i = 0; foreach ($arr as $tip_id => $tip) { $result[$i]['tip_id'] = $tip_id; $result[$i]['tip'] = $tip; $i++; } break;  | 
	
		
 Это я уже видел. Где сам вывод данных то? echo там или еще что-нить в этом духе? 
	 | 
	
		
 
<form action="" method="post" id="dynamic_selects">		
		<div class="row">
			<label for="kat">Категория</label>			
			<select id="kat">				
				<option value="0">Выберите из списка</option>
				<?php 
					 for($i=0;$i<$kolvo_kat;$i++)
	  {
			 $stroka_kat=mysql_fetch_assoc($dannye_kat); 
			  $sel='';
			  if($stroka_kat['kid']==$kat_sel)
			  {
			  $sel=' selected="selected"';
			  }
			  echo '<option value="'.$stroka_kat['kid'].'"'.$sel.'>'.$stroka_kat['kname'].'</option>';
	  }	               
				  
				  		?>
			</select>
		</div>		
		<div class="row">
			<label for="tip">Тип</label>
			<select id="tip" disabled>
				<option value="0">Выберите из списка</option>
			</select>
		</div>
		
	</form>
 | 
	
		
 Это всё в query.php? Вы понимаете, что скрипт, к которому обращаетесь аяксом должен выводить только данные в JSON формате, а не отдавать целую страницу? 
	 | 
	
		
 нет, это в отдельном файле в index, а к нему подключены query.php, скрипт и библеотека jQuery 
	вот как полностью выглядит query.php 
$stroka_zaprosa_kat="SELECT * FROM  kat";
        $dannye_kat=mysql_query($stroka_zaprosa_kat, $connect) or die(mysql_error()) ; 
        $kolvo_kat=mysql_num_rows($dannye_kat); 
        $kat_sel="";
        if(isset($_POST['kat']))
        {
            $kat_sel=$_POST['kat'];
        }
 
 
$tip = $mysqli->query("SELECT *
            FROM  `tip`
            WHERE  `id_kat` =  '".$_POST['kat_id']."'");       
        $arr = array();
        while($row = mysqli_fetch_assoc($tip)){
           $arr[] = array($row['tid'] => $row['tname']);
        }
        return $arr;
    
 
if (!isset($_POST['query']) || !$_POST['query']) {
    exit("Нет данных определяющих тип запроса");
}
else {
    
    $query = trim($_POST['query']); 
    // Определяем тип запроса
    switch($query) {
    case 'getTip':  
        // Формируем массив с ответом
        
        $result = NULL;
        $i = 0;
        foreach ($arr as $tip_id => $tip) {
            $result[$i]['tip_id'] = $tip_id;
            $result[$i]['tip'] = $tip;
            $i++;
        }
        
    break;
    
    default:
        // Если данные не определены
        $result = NULL;
    break;
    }
}
 
// Преобразуем данные в формат json, чтобы их смог обработать JavaScript-сценарий, приславший запрос
echo json_encode($result);
 | 
	
		
 return $arr; А вот это зачем? Оно же при выполнении скрипта его завершит и выполнение не дойдет до echo.  | 
	
		
 я массив поправила, теперь отдельно он работает, но без  return $arr;, но если я вставляю  его в код и убираю return, то выводится "Нет данных определяющих тип запроса" 
	
$tip = $mysqli->query("SELECT *
            FROM  `tip`
            WHERE  `id_kat` =  '".$_POST['kat_id']."'");       
        $arr = array();
        while($row = mysqli_fetch_assoc($tip))
		{
          $arr[$row['tid']] = $row['tname'];
        }
        return $arr;
В чем может быть дело?  | 
	
		
 Цитата: 
	
  | 
	
		
 jsnb, не увидела ваш предыдущий ответ. я сама понимаю, что с ним массив не дойдет, но без него не работает вообще, даже  select не выводит 
	 | 
	
		
 этот запрос находится у меня в query.php 
	 | 
	
		
 для ajax и так отдельный скрипт вроде 
	 | 
	
		
 я уже ничего не понимаю:(( 
	 | 
	
		
 У меня 4 файла, index(там вывод), query.php, my.script.js, jquery.min.js 
	 | 
	
		
 Цитата: 
	
  | 
	
		
 да, через include. сейчас попробую 
	 | 
	
		
 попробовала, выводит "Нет данных определяющих тип запроса" 
	Убрала все ifы из query.php, оставила только запросы с массивом. зависимый select стал активным, но выводятся пустые строки  | 
	
		
 Если оно пишет "Нет данных определяющих тип запроса", то значит переменная $_POST['query'] не определена, что странно. Попробуйте data параметр в ajax записать так: 
	
data: {query: 'getTip', kat_id: kat_id},
 | 
	
		
 написала, все по-прежнему 
	 | 
	
		
 дак она и не может быть определена, пока не выбран параметр из первого списка, а как он может быть выбран, если списки select вообще не выводятся. Может  быть нужно еще какое-то условие? 
	 | 
	
		
 добавила еще одно условие, теперь запрос не ругается, и зависимый список становится акивным, при выборе первого, но опять данные не видны 
	 | 
	
		
 Я, если честно, уже не понимаю куда вы там чего надобавляли и чего у вас там где не выводится. Я просил вас только скопировать часть после return $arr в новый php файл и при этом ничего не менять в query.php и остальных файлах. Ну и в url параметре аякса написать имя файла в который был скопирован код. Но вы начали какие-то условия менять и еще чего-то непонтное делать. Я должен методом телепатии узнавать что вы там меняете что ли? 
	 | 
	
		
 Я разделила, но это не помогло. Теперь у меня 5 файлов. Добавила новое условие в query.php. 
	Теперь select второй становится активным, но параметры нужные не выводятся. Вот что у меня получилось: query.php 
include('zapros.php');
// Проверяем наличие переменной, которая укажет данному сценарию какие именно данные нужны
if(isset($_POST['kat_id']))
{
if (!isset($_POST['query']) || !$_POST['query']) 
{
	exit("Нет данных определяющих тип запроса");
}
else {
	// Сохраняем строку запроса данных в отдельной переменной
	$query = trim($_POST['query']); // Очищаем от лишних пробелов
	
	// Определяем тип запроса
	switch($query) 
	{
	case 'getTip':	// Запрос на получение 
		// Сохраним в переменную значение выбранного типа транспорта
		$kat_id = trim($_POST['kat_id']); // Очистим его от лишних пробелов
		// Формируем массив с ответом
		
		$result = NULL;
		$i = 0;
		foreach ($arr as $tip_id => $tip) 
		{
			$result[$i]['tip_id'] = $tip_id;
			$result[$i]['tip'] = $tip;
			$i++;
		}
        
	break;
	
	default:
		// Если данные не определены
		$result = NULL;
	break;
	}
}
}
echo json_encode($result);
zapros.php 
$stroka_zaprosa_kat="SELECT * FROM  kat";
		$dannye_kat=mysql_query($stroka_zaprosa_kat, $connect) or die(mysql_error()) ; 
		$kolvo_kat=mysql_num_rows($dannye_kat);	
		$kat_sel="";
		if(isset($_POST['kat']))
		{
			$kat_sel=$_POST['kat'];
		}
if(isset($_POST['kat_id']))
{
$tip = $mysqli->query("SELECT *
            FROM  `tip`
            WHERE  `id_kat` =  '".$_POST['kat_id']."'");       
        $arr = array();
        while($row = mysqli_fetch_assoc($tip))
		{
          $arr[$row['tid']] = $row['tname'];
        }
}
ну и скрипт остался прежним 
(function () {	
	"use strict";
	jQuery(function () {
		
		$( '#kat' ).change(function () {
			
			$( '#tip').find( 'option:not(:first)' )	
				.remove()	
				.end()
				.prop( 'disabled',true );	
			var kat_id = $( this ).val();
			if (kat_id == 0) { return; }			
			$.ajax({
				type: "POST",	
				url: "query.php",	
				dataType: "json",	
				data: {query: 'getTip', kat_id: kat_id},	
				error: function (xhr, status, error) {   
  alert( status + ' | ' + error ); 
}
,				success: function ( data ) { 					
					for ( var i = 0; i < data.length; i++ ) {						
						$( '#tip' ).append( '<option value="' + data[i].tip_id + '">' + data[i].tip + '</option>' );
					}
					$( '#tip' ).prop( 'disabled', false );	
				}
			});
		});
	}); 
})();
 | 
	
		
 В общем, так еще хуже стало. Возвращайте всё как было. Надо смотреть что конкретно в переменных на каждом этапе и что в конце возвращается. Я не могу узнать, что у вас там в базе, что выбирается и что в результате из этого получается. Вы сами можете посмотреть что у вас там в переменных? И я так и не понял зачем к index файлу подключается query.php? 
	 | 
	
		
 А куда подключать query если не к индексу? Пытаюсь вывести пост, но ничего не выводится, может быть первый select POST не передает? Еще все время выводится NULL, т.е. что данные не определены 
	 | 
	
		
 Цитата: 
	
 Цитата: 
	
  | 
	
		
 Цитата: 
	
  | 
	
		
 Но в общем вы правы) Я перенесла запрос для первого select в index, убрала этот include и у меня исчез NULL))) 
	 | 
| Часовой пояс GMT +3, время: 17:38. |