Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Сохранить дату в бд с помощью ajax (https://javascript.ru/forum/jquery/63805-sokhranit-datu-v-bd-s-pomoshhyu-ajax.html)

nina_ 30.06.2016 18:08

Сохранить дату в бд с помощью ajax
 
Добрый день

Подскажите: как можно отправить дату из календаря datepicker UI с помощью ajax?

Например сейчас выбранная дата записывается по нажатию кнопки:
<div id="datepicker"></div>
<form method="post" action="process.php" id="myform" name="myform">
    <input id="input" name="input" type="text">
    <input type="submit" name="submit" id="submit" value="submit">
</form>


<script type = "text/javascript">
    jQuery(document).ready(function() {
        $( "#datepicker").datepicker({
            dateFormat: 'dd/mm/yy',
            altField: '#input'
        });
    });
</script>


А как сделать следующее: click по дате календаря -> дата передана скрипту -> скрипт записал ее в бд и пока все это происходит мы остаемся на странице с календарем?

как я понимаю submit и action теперь не нужны:
<div id="datepicker"></div>
<form method="post" id="myform" name="myform">
    <input id="input" name="input" type="text">
</form>


А как правильно использовать $.ajax и указать ему, что необходимо передать дату скрипту process.php как только дата на календаре будет выбрана и соответственно окажется в value input-а?
jQuery(document).ready(function() {
        $( "#datepicker").datepicker({
            dateFormat: 'dd/mm/yy',
            altField: '#input'
        });
        $("#input").click(function() {
            $.ajax({
                type: 'POST',
                url: "process.php",
                dataType: "json",
                data: $('#myform').serialize(),
                success: function(data) {
                console.log("Done");
                 }
            });
            return false;
        });
    });
</script>

Наверное нужно что-то другое вместо click использовать?
Подскажите, пожалуйста, как это должно быть.

рони 30.06.2016 18:22

nina_,
jQuery(document).ready(function() {
        $( "#datepicker").datepicker({
            dateFormat: 'dd/mm/yy',
            altField: '#input',
            onSelect: function(dateText, inst) {
            $.ajax({
                type: 'POST',
                url: "process.php",
                dataType: "json",
                data: dateText,
                success: function(data) {
                console.log("Done");
                 }
            }); }

        });
    });

nina_ 30.06.2016 19:03

А что значат параметры dateText, inst?
Как скрипт понимает, что нужно взять значение input?

рони 30.06.2016 19:19

nina_,
http://jquery.page2page.ru/index.php5/%D0%9A%D0%B0%D0%BB%D0%B5%D0%BD%D0%B4%D0%B0%D1%80%D 1%8C_UI
события --> onSelect

или
http://api.jqueryui.com/datepicker/#option-onSelect

laimas 30.06.2016 19:26

nina_, дата в базу в формате dd/mm/yy не будет записана, если поле имеет тип DATE.

nina_ 30.06.2016 19:35

Прочитала, но не поняла следующее:

Функция, заданная в onSelect будет вызываться выборе даты в календаре. Первый параметр, передаваемый в нее будет содержать текст выбранной даты, в формате, определенном в свойстве dateFormat. Второй параметр будет содержать объект самого календаря. Переменная this будет содержать input-элемент, к которому привязан текущий календарь.

$("selector").datepicker({
   onSelect: function(dateText, inst) { ... }
});

О какой переменной this идет речь в примере?

nina_ 30.06.2016 19:36

Ясно, спасибо за уточнение. Тип у меня varchar, но дата, пока, все равно не записывается.

laimas 30.06.2016 19:37

Цитата:

Сообщение от nina_
Тип у меня varchar

Это плохо.

nina_ 30.06.2016 19:39

А как правильно?

laimas 30.06.2016 19:51

Цитата:

Сообщение от nina_
А как правильно?


Я не знаю (или забыл если ранее сталкивался) этого плагина, но по идее this, это объект на который повешен календарь. На сервер же нужно передавать не dateText, а ключ = dateText, где ключом может быть имя поля, которому и назначен календарь, то есть:

data: this.name+'='+dateText,

а на сервере принимать как

$_POST['name'], где name имя поля.

А для того, чтобы в полной мере использовать дату в базе (выборка/сортировка) тип должен быть DATE, и это формат YYYY-mm-dd


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