Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.09.2016, 13:22
Интересующийся
Отправить личное сообщение для suxxoi Посмотреть профиль Найти все сообщения от suxxoi
 
Регистрация: 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( '"', '&quot;', $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?
Ответить с цитированием
  #2 (permalink)  
Старый 26.09.2016, 15:01
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Ничего не понял, но суть вопроса такова: можно.

if ($sql) echo json_encode($sql);

и js переделать на получение списка в json.

Почему нельзя на русском описать задачу?
Ответить с цитированием
  #3 (permalink)  
Старый 27.09.2016, 14:29
Интересующийся
Отправить личное сообщение для suxxoi Посмотреть профиль Найти все сообщения от suxxoi
 
Регистрация: 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);
					
                                          { .... }

					}

			});
		});
Ответить с цитированием
  #4 (permalink)  
Старый 27.09.2016, 15:20
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Я за тебя напишу ТЗ.

Привет котаны, проблема такая. У меня форма выдается со страницей и тут все нормально. Но я захотел ее обновлять аяксом и сделал это. Но теперь мне выдается гребаный html, который я пихаю в форму и вполне понятно к чертям убиваю все, что там было введено или выбрано. Как мне сделать обновление данных?

Котаны пишут. Придется сделать вилку в модели, которая увидев аякс-запрос наколет другой шаблон вывода - для аякса, или если MVC нету - вилку в рендере, которая увидев аякс-запрос выдаст данные, а не хтмл. А в жабаскрипте просто возьмешь объект и раскидаешь его по полям.

Понял? )))
Ответить с цитированием
  #5 (permalink)  
Старый 27.09.2016, 15:25
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 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'])) бла-бла-бла. Или просто запрашивать выделенный именно для этой задачи адрес.

Больше я не могу ничего советовать, потому что вообще не понял что там обновляется и куда чего пихать.
Ответить с цитированием
  #6 (permalink)  
Старый 27.09.2016, 15:33
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 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().

А тебе все-то надо найти одно, или сколько там полей.
Ответить с цитированием
  #7 (permalink)  
Старый 27.09.2016, 15:35
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Короче, тут нужен спец по JQuery, там этих методов всякой аяксовой загрузки как гавна. Может есть и такой как тебе нужен, готовый.
Ответить с цитированием
  #8 (permalink)  
Старый 28.09.2016, 16:48
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от warren buffet
Короче, тут нужен спец по JQuery
А к чему тогда очередной словесный понос твой здесь?
Ответить с цитированием
  #9 (permalink)  
Старый 28.09.2016, 16:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 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;

??
Ответить с цитированием
  #10 (permalink)  
Старый 29.09.2016, 18:30
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Теперь твоя очередь поносить. Хочешь гифку? )))
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как реализовать эффект lazyload sanek.me Events/DOM/Window 21 15.02.2017 12:31
Как правильно прицепить обработку события slowklg Events/DOM/Window 6 15.03.2012 16:20
Как правильно очистить maxlength в input? Маэстро Events/DOM/Window 10 22.06.2011 18:14
Как реализовать взаимодействие окон? JSTalker ExtJS 1 29.06.2010 14:29
Как реализовать вывод такого окна nastya Events/DOM/Window 4 04.02.2010 05:41