Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 19.08.2013
Сообщений: 163

Как подружить две переменные, где одна из ajax?

17.11.2016, 17:59. Показов 891. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Ситуация такова.

Есть php файл, который обращается к бд и выводит значение таблицы. Открыв свой php файл я увижу ["2016-12-03"], ["2016-11-25"],

На сайте у меня ajax функция, которая принимает это php сообщение:
JavaScript
1
2
3
4
5
6
7
8
9
$.ajax({
                type: "POST",
                url: "/php.php",
                data: $('#ajaxlogin').serialize(),
                success: function(msg){
                $('.a-info').text('Успешное подключение')
                $('.brondate').text(msg);
                }
            });
div brondate без проблем принимает вид: ["2016-12-03"], ["2016-11-25"],

Ниже у меня идёт код календаря с диапазоном дат
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var array = ["2016-11-20","2016-11-25","2016-12-03",]
 
  $('#date_range').datepicker({
    range: 'period', // режим - выбор периода
    numberOfMonths: 2,
    dateFormat: "yy-mm-dd",
    minDate: 0,
    onSelect: function(dateText, inst, extensionRange) {
        // extensionRange - объект расширения
      $('[name=startDate]').val(extensionRange.startDateText);
      $('[name=endDate]').val(extensionRange.endDateText);
    }
  });
// затемнение дат
$('#date_range').datepicker('option','beforeShowDay',
     function(date){
        var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
        return [ array.indexOf(string) == -1 ,"", null ]
    }
);
Обратите внимание на "затемнение дат". В календаре даты, которые указаны в array, неактивны. Я хотел эту "неактивность" брать из бд, но array не хочет принимать значение msg от php
Как подружить array с сообщением из php? Я попытался сделать так
JavaScript
1
2
3
4
var bron = msg;
                }
            });
var array = bron
Но ничего не заработало.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.11.2016, 17:59
Ответы с готовыми решениями:

Как подружить php & AJAX
Доброго времени суток! Есть запрос к бд: $artid = mysql_query("SELECT `readybattle` FROM `articles` WHERE `id` =...

одна строка в едит как две
Как сделать чтобы например procedure button1click; begin memo1.lines.add(edit1.text+':'+edit2.text); end; procedure...

Как производительнее: одна или две таблицы?
Пишу онлайн игрушку (flash-php-mySQL), в основной таблице хранятся данные пользователей (uid, md5_подписи, имя, линк на картинку, адрес...

8
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
17.11.2016, 20:33
PHP
1
echo  json_encode(array("2016-11-20","2016-11-25","2016-12-06","2016-12-07"));
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
18.11.2016, 11:00
drkrol, и вновь, и вновь, и опять по новой новички будут допускать эту ошибку.
Дело в том, что ajax-запросы по умолчанию асинхронны. Это означает, что сценарий, грубо говоря, разделится на 2 независимых сценария, которые будут выполняться параллельно. То есть:
JavaScript
1
2
3
4
5
6
7
$.ajax({
   ...
   success: function(response) {
      // Код_1
   }
});
// Код_2
Код_1 и Код_2 будут выполняться параллельно друг другу. Поскольку Код_1 начнет выполняться только после ответа от сервера (а это занимает какое-то время), то Код_2 вероятнее всего будет выполнен раньше, чем Код_1.
Короче говоря, в тот момент, когда вы работаете с array в блоке "затемнение дат", массиву еще не присвоено значение из msg. Все действия, которые необходимо выполнить только после ответа от сервера необходимо располагать в callback-функции ajax-запроса.
Примерно так:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$.ajax({
                type: "POST",
                url: "/php.php",
                data: $('#ajaxlogin').serialize(),
                success: function(msg){
                $('.a-info').text('Успешное подключение')
                $('.brondate').text(msg);
                array = msg; // Присвоение условное. Заполните массив корректно из строки, полученной с сервера.
                setupCalendar(); // Вот теперь мы можем переходить к "затемнению дат"
                }
            });
 
function setupCalendar() {
   $('#date_range').datepicker('option','beforeShowDay',
     function(date){
        var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
        return [ array.indexOf(string) == -1 ,"", null ]
    }
   );
}
0
1 / 1 / 0
Регистрация: 19.08.2013
Сообщений: 163
30.11.2016, 03:43  [ТС]
Balanaar, а что делать, если у меня 2 ajax'а, а данные нужно вставить в один код? Вот, смотри:
JavaScript
1
2
3
4
5
6
    $.post('../admin/findate.php', { "nnomer": nnomer}, function( data ) {
        myFunc(data);
  });
    $.post('../admin/findnomerprice.php', { "nnomer": nnomer}, function( data ) {
        mygen(data);
  });
И первая и вторая data должны попасть в один datepicker. Как такое сделать?
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
30.11.2016, 10:05
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
var ready1 = new Promise((resolve, reject) => {
   $.ajax({
      type: "POST",
      url: "../admin/findate.php",
      data: {
         "nnomer": nnomer   
      },
      success: function(data) {
         resolve(data);
      },
      error: function() {
         reject('Ошибка');
      }
   });
});
 
var ready2 = new Promise((resolve, reject) => {
   $.ajax({
      type: "POST",
      url: "../admin/findnomerprice.php",
      data: {
         "nnomer": nnomer   
      },
      success: function(data) {
         resolve(data);
      },
      error: function() {
         reject('Ошибка');
      }
   });
});
 
Promise.all([ready1, ready2]).then(dates => {
   yourDatepicker(dates); // Где dates[0] и dates[1] - полученные даты в результате ajax-запроса
});
Функция yourDatepicker() будет вызвана только тогда, когда оба ajax-запроса будут успешно выполнены и вернут результат.
1
1 / 1 / 0
Регистрация: 19.08.2013
Сообщений: 163
30.11.2016, 16:05  [ТС]
Balanaar, отлично, всё работает. Но мне сорока на хвосте принесла информацию о том, что очень много браузеров не поймут Promise. Это так?
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
30.11.2016, 16:26
Если есть необходимость поддерживать работу допотопных браузеров времён мезозоя, вы можете реализовать подобное по-другому. Например, вы можете объявить глобальный счётчик завершённых ajax-запросов, увеличивать его на 1 при каждом ответе от сервера, запускать обработчик в каждом коллбеке $.ajax(), сравнивать счётчик с количеством отправленных запросов и если они равны, то приступать к обработке.
0
1 / 1 / 0
Регистрация: 19.08.2013
Сообщений: 163
30.11.2016, 18:48  [ТС]
Balanaar, ох тыж, как сложно... А по поводу допотопных браузеров. В windows 8.1 из коробки ie 11. Он не поддерживает promise
0
Эксперт JS
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
01.12.2016, 09:38
Ничего сложного на самом деле.
По поводу ie - его доля в рунете по различным данным приходится от 2,4% до 3,6% пользователей. Большая часть из них - офисные ПК и ПК пользователей, которые с интернетом на "вы".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.12.2016, 09:38
Помогаю со студенческими работами здесь

как сравнивать числительные переменные из двух столбцов, если одна из них - строковая?
Всем привет! У меня в таблице две колонки с числами. Их названия "А" и "B" В третьей колонке "C" я их сравниваю с друг...

Как пристыковать две переменные
Мне нужно чтобы к переменной eventDate была пристыкована переменная number, т.е чтобы получилось eventDate3 = 5; var number = 3; ...

Как сравнить две переменные?
#!/bin/sh a=$($SSH_CONNECTION | grep "1" | awk {'print $1'}) b='192.168.0.177' if then sleep 2 echo 'then' else echo...

Как сравнить две переменные string
Есть две переменные типа string в одной записано string X="AB BA AS AX"; В другой string Y="AB"; В строке X...

Как соединить две переменные в одну
У меня вопрос, вот есть перменные arr1,arr2,arr3 etc. Так вот, как сделать чтобы через цикл for(i..., при вызове этой переменной arr+i,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru