Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Помогите найди ошибку в форме регистрации (https://javascript.ru/forum/jquery/57730-pomogite-najjdi-oshibku-v-forme-registracii.html)

IONEX 17.08.2015 00:07

Помогите найди ошибку в форме регистрации
 
Вложений: 2
Доброго времени суток. Хочу создать форму регистрации.
Вложение 2805

Задача такая: при выборе из списка страны без перезагрузки страницы в список должны подгружаться города из БД.
Пытаюсь связать PHP + SQL + JQUERY

Код JQUERY, который реагирует на выбор страны в списке
$('.country').change(function(){
	$.ajax({
		type: "POST",
		url: "get_city_db.php",
		data: "country="+$(this).val(),
		success: function(data){
        	$.each(data, function(i,val) {
            	alert(val);
                $('#cities').append("<option value='"+val+"'>");
            });
		}
	});
});


Собственно PHP файл ("get_city_db.php"), который будет вызван после выбора страны.

<?php
    require_once('/classes/db_connect.class.php');
    $db = new database();
    $db->dbConnect();//Установка соединения с БД
    $resault = $db->selectRowWhere('id_country','countries','country_name','=',$_REQUEST['country'],'char');
    $row = mysql_fetch_assoc($db->dataSet);
    $resault = $db->selectWhere('cities','id_country','=',$row['id_country'],'int');
    $rowSet = array();
    while($row = mysql_fetch_assoc($db->dataSet)){
        $rowSet[] = $row['city_name'];
    }
    echo $rowSet;
?>


Результат который возвращает get_city_db.php (см. выше) показан на рис. ниже

Вложение 2806

Но после возврата массива городов ничего не происходит (отладку jquery в ide netbeans настроить не удалось). В чем может быть ошибка и почему не срабатывает даже alert?

laimas 17.08.2015 04:53

Показанный массив не должен содержать в себе приведения к типу (string), и сервер должен возвращать не массив, а json.

IONEX 19.08.2015 20:26

Спасибо за ответ и подсказку. Все получилось.

Файл jquery:
$(document).ready(function () {
    $('.country').change(function(){
        $.ajax({
            type: "POST",
            url: "get_city_db.php",
            data: "country="+$(this).val(),
            success: function(data){
                var cities = jQuery.parseJSON(data);
                alert('ура '+cities);
                $.each(cities, function(i,val) {
                    alert('ура '+ i);
                    $('#cities').append("<option value='"+val+"'>");
                });
                
            }
	});
});


Файл PHP:
<?php
    require_once('/classes/db_connect.class.php');
    $db = new database();
    $db->dbConnect();//Установка соединения с БД
    $resault = $db->selectRowWhere('id_country','countries','country_name','=',$_REQUEST['country'],'char');
    $row = mysql_fetch_assoc($db->dataSet);
    $resault = $db->selectWhere('cities','id_country','=',$row['id_country'],'int');
    $rowSet = array();
    while($row = mysql_fetch_assoc($db->dataSet)){
        $rowSet[] = $row['city_name'];
    }
    echo json_encode($rowSet);
?>


Еще один небольшой вопрос:
из jquery передаю в php данные так:

data: "country="+$(this).val()


и в php считываю так:

$_REQUEST['country']


Есть ли недостатки такой конструкции и нужно ли, так сказать, по правилам хорошего тона переводить в json?

Rise 19.08.2015 20:58

IONEX, по правилам хорошего тона data: { country: this.value } а то мало ли)

laimas 20.08.2015 05:49

Цитата:

Сообщение от IONEX
Есть ли недостатки такой конструкции и нужно ли, так сказать, по правилам хорошего тона переводить в json?

А смысл? В вашем случае, с одним передаваемым параметром, овчинка выделки не стоит. А вот что касается $_REQUEST['country'], вот тут интереснее. Поступая так, нужно хорошо представлять себе что это за массив такой и его поведение.

Sigizmund2012 20.08.2015 17:36

Цитата:

Сообщение от IONEX
и в php считываю так:

$_REQUEST['country']

Вы на сервер посылаете данные через POST, а считываете через $_REQUEST, зачем? Или вы своим скриптом собираетесь ещё и GET с куками обрабатывать?

laimas 20.08.2015 18:06

Цитата:

Сообщение от Sigizmund2012
Или вы своим скриптом собираетесь ещё и GET с куками обрабатывать?

Этого не будет, так как в данном случае, при приеме именно этого запроса в нем будут данные POST запроса, так как даже при наличии одновременно и GET данных, POST данные их перепишут, и это определяется порядком обработки данных определенных в variables_order.

А вот то, что в этот массив могут поступать данные из GET, POST, COOKIE, и которые можно переопределить, вот это плохо, да еще при регистрации.

Sigizmund2012 20.08.2015 18:25

Цитата:

Сообщение от laimas
Этого не будет, так как в данном случае, при приеме именно этого запроса в нем будут данные POST запроса, так как даже при наличии одновременно и GET данных, POST данные их перепишут, и это определяется порядком обработки данных определенных в variables_order.

Я и не говорил, что там могут быть одновременно и POST и GET данные, просто скрипт с $_REQUEST может быть единым обработчиком для многих форм и ajax запросов. Возможно он так и планирует его использовать.


Часовой пояс GMT +3, время: 02:25.