Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Ajax обновление информации в бд (https://javascript.ru/forum/misc/63266-ajax-obnovlenie-informacii-v-bd.html)

PonyS 27.05.2016 15:40

Ajax обновление информации в бд
 
Здравствуйте! У меня есть html(div с информацией, чистый) и он загружен в бд и вывожу его на страницу с помощью php, и на этой же страницы я динамично через js меняю class в div и текст, и мне нужно чтобы по клику на кнопку эта информация перезаписалась без перезагрузки(на ajax) в бд с новыми изменениями(изменились class, текст) и без никаких потерь(старых), подскажите пожалуйста такой пример реализации или это реально вообще?

PonyS 27.05.2016 16:45

Вот что я накатал , но не выводит обновленную информацию почему-то...Я из бд вывел информацию в 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']); ?>

laimas 27.05.2016 16:53

Цитата:

Сообщение от PonyS
нажал кнопку Сохранить( в надежде что запрос придет на ajax уже с обновленной информацией) но присылает старую информацию без обновления

Зачем вообще возвращать обновление, если сменой класса занимается клиент? Обновление логично ожидать при следующем запросе страницы. А вот это что за шедевр?

if (isset($_POST['name'])) die($_POST['name']); ?

PonyS 27.05.2016 16:56

Цитата:

Сообщение от laimas (Сообщение 417814)
Зачем вообще возвращать обновление, если сменой класса занимается клиент? Обновление логично ожидать при следующем запросе страницы. А вот это что за шедевр?

if (isset($_POST['name'])) die($_POST['name']); ?

Мне нужно сохранить то что сделал клиент в бд, то бишь клиент изменил class у div и запись сразу ушла(на ajax) в обновление и в бд. POST случайно добавил

PonyS 27.05.2016 17:09

Пробую еще вот так:
<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 и загрузить в бд ?((

laimas 27.05.2016 17:22

Вы не ответили на вопрос. Если код ранее показанный обрабатывающий асинхронный запрос клиента и есть родитель обновляемого div и кода клиентского, то почему код ответа расположен после html-кода этой страницы?

И вообще, это бесполезное занятие. Есть у вас элемент с классом А1, клиент меняет его на класс А2. Стиль элемента изменился, зачем же получать сам элемент назад? Сообщили серверу об изменениях, сохранил он их, открывая следующий раз страницу получите элемент уже с классом А2.

PonyS 27.05.2016 17:22

То есть перезагрузка div на ajax, человек изменил информацию, нажал кнопку, информацию обновилась в бд и тут же старая информация пропала и появилась новая

PonyS 27.05.2016 17:25

Цитата:

Сообщение от laimas (Сообщение 417817)
Вы не ответили на вопрос. Если код ранее показанный обрабатывающий асинхронный запрос клиента и есть родитель обновляемого div и кода клиентского, то почему код ответа расположен после html-кода этой страницы?

И вообще, это бесполезное занятие. Есть у вас элемент с классом А1, клиент меняет его на класс А2. Стиль элемента изменился, зачем же получать сам элемент назад? Сообщили серверу об изменениях, сохранил он их, открывая следующий раз страницу получите элемент уже с классом А2.

Мне нужно как бы перезагрузка div на ajax, человек изменил информацию, нажал кнопку, информацию обновилась в бд и тут же старая информация пропала и появилась новая вместо старой, и все это без перезагрузки. А почему нельзя на новой странице открыть? т.к. все оформление идет на одной странице, и нужна возможность тут же еще раз к примеру поменять class, я нагуглил к примеру такое - http://forum.php.su/topic.php?forum=40&topic=4399 , но не пойму как работает...

PonyS 27.05.2016 17:48

Вроде бы вник как получить то что мне нужно, но почему-то 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']; ?>

laimas 27.05.2016 18:19

Если клиент вносит изменения для элемента на странице, то эти изменения уже произошли, зачем серверу возвращать это назад? Ему нужно сохранить изменения и вернуть результат сохранения - успешно или же произошла ошибка.

Если страница содержащая изменяемый элемент содержит и код обработки запроса клиента на изменение, то этот код должен быть расположен до любого вывода в браузер.

Пример без базы, на сессии. Сохранить под любым именем и запустить. Изменить класс элемента. Нажать 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, зачем при этом его гонять туда сюда, я так и не понял.


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