26.09.2016, 13:22
|
Интересующийся
|
|
Регистрация: 09.09.2016
Сообщений: 16
|
|
Как правильно реализовать замену?
Есть страница где загружаются данные по полям state и state_str
Если в базе не находится для страны штат, выводится поле input,если есть select
elseif( $component == "state" || $component == "state_str" ) {
if( in_array( $d->country, country::$countries_with_parsed_states ) ) {
if( $component == "state_str" ) {
continue;
}
$state_map = country::get_region_list( $d->country, true );
echo "<tr><td>" . $field_name . "</td><td id='state'><select name='" . $component . "'>";
echo "<option value='0'>Select State</option>";
foreach( $state_map as $id_state => $label ) {
echo "<option value='" . $id_state . "' " . ( $d->$component == $id_state ? 'selected=selected' : '' );
echo ">" . $label . "</option>";
}
echo "</select></td></tr>";
}
else {
if( $component == "state" ) {
continue;
}
echo "<tr><td>" . $field_name . "</td><td id='statestr'>
<input class='form-control' type='text' name='" . $component . "' value=\"" . str_replace( '"', '"', $d->$component ) . "\" /></td></tr>";
}
Написал AJAX,чтобы при выборе страны из базы подгружались данные по штатам, если нет то ставилось поле с вводом
$("#country_code").change(function () {
var id_country=$(this).val();
$.ajax({
type: 'POST',
url: '/ajax/state_country.php',
data: 'id='+id_country,
success: function (data) {
$('#state').html(data);
$('#statestr').html(data);
}
})
});
Текст state_country.php
$term = (int)$_POST[ 'id' ];
$sql = $db->fetchAll( 'SELECT region_id, region_full_name FROM regions WHERE region_country_id = :id_country', [ 'id_country' => $term ] );
if ($sql){
echo '<select name="state">';
foreach($sql as $state) {
echo '<option value="' . $state ['region_id'] .'">' . $state ['region_full_name'] . '</option>';
}
echo '</select >';
} else {
echo '<input class="form-control" type="text" name="state_str" />';
}
Данный метод работает затирая старые данные, можно ли в текущие поля подгружать данные? И чтобы при этом названия строки тоже менялось, если выбран state = State, если statestr = State str?
|
|
26.09.2016, 15:01
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Ничего не понял, но суть вопроса такова: можно.
if ($sql) echo json_encode($sql);
и js переделать на получение списка в json.
Почему нельзя на русском описать задачу?
|
|
27.09.2016, 14:29
|
Интересующийся
|
|
Регистрация: 09.09.2016
Сообщений: 16
|
|
Сорри, за написание
Как мне правильно показывать данные JSON в select?
Вот файл AJAX
$term = (int)$_POST[ 'id' ];
$sql = $db->fetchAll( 'SELECT region_id, region_full_name FROM regions WHERE region_country_id = :id_country', [ 'id_country' => $term ] );
if ($sql){
$r = [];
foreach($sql as $state) {
$r [] = ['id'=>$state['region_id'], 'name'=>$state['region_full_name']];
}
} else {
$r = null;
}
echo json_encode($r);
Вот вывод на страницу
$("#country").change(function () {
var id_country=$(this).val();
$.ajax({
type: 'POST',
url: '/ajax/state_country.php',
data: 'id='+id_country,
success: function (data) {
pars=jQuery.parseJSON(data);
{ .... }
}
});
});
|
|
27.09.2016, 15:20
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Я за тебя напишу ТЗ.
Привет котаны, проблема такая. У меня форма выдается со страницей и тут все нормально. Но я захотел ее обновлять аяксом и сделал это. Но теперь мне выдается гребаный html, который я пихаю в форму и вполне понятно к чертям убиваю все, что там было введено или выбрано. Как мне сделать обновление данных?
Котаны пишут. Придется сделать вилку в модели, которая увидев аякс-запрос наколет другой шаблон вывода - для аякса, или если MVC нету - вилку в рендере, которая увидев аякс-запрос выдаст данные, а не хтмл. А в жабаскрипте просто возьмешь объект и раскидаешь его по полям.
Понял? )))
|
|
27.09.2016, 15:25
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Идентифицировать аякс можно по заголовку
protected function get_ajax() {
return $this->_d['ajax']=isset($_SERVER['HTTP_X_REQUESTED_WITH'])
&& strcasecmp($_SERVER['HTTP_X_REQUESTED_WITH'],'xmlhttprequest')==0;
}
Заголовок надо отправить из js, JQuery это умеет.
Или тупо приписав к адресу (в аякс-запросе на жабе) какой-нить ключик, типа ?ajax=ajax, чтобы затем в php if(isset($_GET['ajax'])) бла-бла-бла. Или просто запрашивать выделенный именно для этой задачи адрес.
Больше я не могу ничего советовать, потому что вообще не понял что там обновляется и куда чего пихать.
|
|
27.09.2016, 15:33
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Цитата:
|
pars=jQuery.parseJSON(data);
|
А теперь берешь берешь поле как элемент и пихаешь в него новые значения, или берешь старые значения, приделываешь новые.
Я старался но все равно нихера не понял твоей специфики. Вот нашел у себя. Задача там решается простая. Есть форма, редактируемая, ну типа как профиль скажем, юзер жмет сохранить, данные уходят на сервер, валидация, сохранение, а в качестве ответа приходят те же данные, но уже с сервера. Зачем так я сделал, хз, ну, типа, чтобы увидеть, как понял сервер, что именно записалось. Эти данные раскидываются после парсера жисона так
for(var name in data)
if(name in the.inputs)
the.inputs[name].update(data[name]);
the.inputs - это коллекция полей формы, каждое поле заворачивается в объект своего типа, у объекта есть методы, например .update().
А тебе все-то надо найти одно, или сколько там полей.
|
|
27.09.2016, 15:35
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Короче, тут нужен спец по JQuery, там этих методов всякой аяксовой загрузки как гавна. Может есть и такой как тебе нужен, готовый.
|
|
28.09.2016, 16:48
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от warren buffet
|
Короче, тут нужен спец по JQuery
|
А к чему тогда очередной словесный понос твой здесь?
|
|
28.09.2016, 16:50
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
suxxoi,
elseif( $component == "state" || $component == "state_str" ) что это
если if( in_array( $d->country, country::$countries_with_parsed_states ) ) {
и if( $component == "state_str" ) continue;
??
|
|
29.09.2016, 18:30
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Теперь твоя очередь поносить. Хочешь гифку? )))
|
|
|
|