27.05.2016, 15:40
|
Аспирант
|
|
Регистрация: 19.04.2016
Сообщений: 55
|
|
Ajax обновление информации в бд
Здравствуйте! У меня есть html(div с информацией, чистый) и он загружен в бд и вывожу его на страницу с помощью php, и на этой же страницы я динамично через js меняю class в div и текст, и мне нужно чтобы по клику на кнопку эта информация перезаписалась без перезагрузки(на ajax) в бд с новыми изменениями(изменились class, текст) и без никаких потерь(старых), подскажите пожалуйста такой пример реализации или это реально вообще?
|
|
27.05.2016, 16:45
|
Аспирант
|
|
Регистрация: 19.04.2016
Сообщений: 55
|
|
Вот что я накатал , но не выводит обновленную информацию почему-то...Я из бд вывел информацию в id test1, затем по клику в div с id test1 поменял class с одного на другой и нажал кнопку Сохранить( в надежде что запрос придет на ajax уже с обновленной информацией) но присылает старую информацию без обновления...Подскажите пожалуйста куда копать...
<input type="button" id="send" value="Сохранить">
Результат обновления -
<div id="result"></div>
<script>
//при клике на кнопку
$("#send").click(
function() {
//отправляем ( куда , что (имя / значение) , получаем ответ)
$.post('/order.php', { name: $("#test1").val() } , function(data) {
//ответ заносим в див
$('#result').html(data);
} );
}
);
</script>
<? if (isset($_POST['name'])) die($_POST['name']); ?>
|
|
27.05.2016, 16:53
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от PonyS
|
нажал кнопку Сохранить( в надежде что запрос придет на ajax уже с обновленной информацией) но присылает старую информацию без обновления
|
Зачем вообще возвращать обновление, если сменой класса занимается клиент? Обновление логично ожидать при следующем запросе страницы. А вот это что за шедевр?
if (isset($_POST['name'])) die($_POST['name']); ?
|
|
27.05.2016, 16:56
|
Аспирант
|
|
Регистрация: 19.04.2016
Сообщений: 55
|
|
Сообщение от laimas
|
Зачем вообще возвращать обновление, если сменой класса занимается клиент? Обновление логично ожидать при следующем запросе страницы. А вот это что за шедевр?
if (isset($_POST['name'])) die($_POST['name']); ?
|
Мне нужно сохранить то что сделал клиент в бд, то бишь клиент изменил class у div и запись сразу ушла(на ajax) в обновление и в бд. POST случайно добавил
|
|
27.05.2016, 17:09
|
Аспирант
|
|
Регистрация: 19.04.2016
Сообщений: 55
|
|
Пробую еще вот так:
<script>$(document).ready(function(){
$(".price").click(function(){
$.ajax({
type:"POST",
url:"/order.php",
data:$('#test1').html(),
success: function(response){
$('#result').html(response);
}
});
});
}); </script>
Результат обновления
<div id="result"></div>
Но все равно не присылает обновленный вариант div id=test1, подскажите пожалуйста как решить... И опять не пойму, если даже и получиться вывести обновленную информацию из div test1, как ее вытянуть из id result и загрузить в бд ?((
Последний раз редактировалось PonyS, 27.05.2016 в 17:11.
|
|
27.05.2016, 17:22
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Вы не ответили на вопрос. Если код ранее показанный обрабатывающий асинхронный запрос клиента и есть родитель обновляемого div и кода клиентского, то почему код ответа расположен после html-кода этой страницы?
И вообще, это бесполезное занятие. Есть у вас элемент с классом А1, клиент меняет его на класс А2. Стиль элемента изменился, зачем же получать сам элемент назад? Сообщили серверу об изменениях, сохранил он их, открывая следующий раз страницу получите элемент уже с классом А2.
|
|
27.05.2016, 17:22
|
Аспирант
|
|
Регистрация: 19.04.2016
Сообщений: 55
|
|
То есть перезагрузка div на ajax, человек изменил информацию, нажал кнопку, информацию обновилась в бд и тут же старая информация пропала и появилась новая
|
|
27.05.2016, 17:25
|
Аспирант
|
|
Регистрация: 19.04.2016
Сообщений: 55
|
|
Сообщение от laimas
|
Вы не ответили на вопрос. Если код ранее показанный обрабатывающий асинхронный запрос клиента и есть родитель обновляемого div и кода клиентского, то почему код ответа расположен после html-кода этой страницы?
И вообще, это бесполезное занятие. Есть у вас элемент с классом А1, клиент меняет его на класс А2. Стиль элемента изменился, зачем же получать сам элемент назад? Сообщили серверу об изменениях, сохранил он их, открывая следующий раз страницу получите элемент уже с классом А2.
|
Мне нужно как бы перезагрузка div на ajax, человек изменил информацию, нажал кнопку, информацию обновилась в бд и тут же старая информация пропала и появилась новая вместо старой, и все это без перезагрузки. А почему нельзя на новой странице открыть? т.к. все оформление идет на одной странице, и нужна возможность тут же еще раз к примеру поменять class, я нагуглил к примеру такое - http://forum.php.su/topic.php?forum=40&topic=4399 , но не пойму как работает...
|
|
27.05.2016, 17:48
|
Аспирант
|
|
Регистрация: 19.04.2016
Сообщений: 55
|
|
Вроде бы вник как получить то что мне нужно, но почему-то post на ajax не выводиться <? echo $_POST['ides']; ?> , помогите найти проблему пожалуйста, по клику на price должен на ajax отправляться post запрос с информацией из div test1
<script>$(document).ready(function(){
$(".price").click(function(){
$.ajax({
type:"POST",
url:"/order.php",
data: {ides: $('#test1').html()},
success: function(response){
}
});
});
}); </script>
<? echo $_POST['ides']; ?>
|
|
27.05.2016, 18:19
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Если клиент вносит изменения для элемента на странице, то эти изменения уже произошли, зачем серверу возвращать это назад? Ему нужно сохранить изменения и вернуть результат сохранения - успешно или же произошла ошибка.
Если страница содержащая изменяемый элемент содержит и код обработки запроса клиента на изменение, то этот код должен быть расположен до любого вывода в браузер.
Пример без базы, на сессии. Сохранить под любым именем и запустить. Изменить класс элемента. Нажать F5 (последующее открытие страницы).
<?
session_start();
if($_POST['choice']) {
$_SESSION['class'] = $_POST['choice'];
exit('Ok');
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style>
.red {
color: #f00;
}
.green {
color: #0f0;
}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script>
$(function() {
$('input').change(function() {
$('p')[0].className = this.value;
$.post(location, {choice : this.value}, function(d) {
alert(d)
})
});
});
</script>
</head>
<body>
<p class="<?=$_SESSION['class'] ?: 'red'?>">Text</p>
<fieldset>
<legend>Изменение класса</legend>
<label><input type="radio" name="choice" value="red" <?=!$_SESSION['class'] || $_SESSION['class']=='red' ? 'checked' : null?> /> Красный</label>
<label><input type="radio" name="choice" value="green" <?=$_SESSION['class']=='green' ? 'checked' : null?> /> Зеленый</label>
</fieldset>
</body>
</html>
То есть, при запросах страницы элемент будет иметь тот класс, который ранее был сохранен. Отсылать для этого элемент Р на сервер нет необходимости.
Другое дело, если речь идет, к примеру, о визуальном редакторе и html-код подготавливаемый в нем нужно предварительно просмотреть "в реальных условиях". Что вы меняете в DIV, зачем при этом его гонять туда сюда, я так и не понял.
|
|
|
|