Как выполнить запрос в базу на ajax?

Есть запрос на выборку из бд:
$up=mysql_query("SELECT * FROM `teble`  WHERE `test`='ddd' 
while($with=@mysql_fetch_array($up)){
$test2 = $with['test2']
}

Вот этот запрос нужно выполнять н ное количество раз с интервалом в 3 секунды или пока переменная $test2 не получит нужное значение.

А в момент выполнения запроса - текст подождите, но это уже сам организую=)))))))
  • Вопрос задан
  • 3114 просмотров
Решения вопроса 2
sayber
@sayber Куратор тега PHP
Да, я программирую на PHP и еще асинхронно!
Самый простой пример. jquery я думаю уже есть.
function ajaxQuery () {
    // Загрузка
    $("div#loading").html('Загрузка...');
    // ajax
    $.post('/my_url/', {keyword: 'value'}, function (data) {
        // если есть результат от запроса
        if (data) {
            // если нашли что искали, что то делаем
            // убираем - Загрузка...
            $("div#loading").html('');
        }  
    });
}
// Вызываем нашу функцию каждые 3 сек
setInterval( ajaxQuery, 3000)


api.jquery.com/jquery.ajax
api.jquery.com/ajaxcomplete
Ответ написан
Комментировать
@bromzh
Drugs-driven development
Задержку по времени в синхронном коде вставлять нельзя. будет тормозить всё приложение (оно же однопоточное). Делай задержку в асинхронном режиме. Тебе надо написать функцию, которая будет выполнять запрос и проверять, заполнилась ли переменная нужным значением. Если да - то возвращай его, если нет - делай задержку и повторяй. ПХП я не знаю (и как там работать с корутинами тоже). Ты сам почитай, например, вот это. Я приведу пример, как это можно сделать на питоне с пояснениями, на ПХП сам перепиши. Итак:
import asyncio  # модуль, который позволяет работать в асинхронном режиме
import random

# "сообщаем", что функция получения данных будет исполняться как сопрограмма
@asyncio.coroutine
def fetch_data():
    data = 0
    # Для примера, будем запрашивать данные, пока не выпадет 6-ка.
    # в реале, вместо получения рандома, ты должен делать запрос к БД
    while not data == 6: 
        print(data)
        data = random.randint(0, 10)  # вот тут делай запрос к БД и заполняй твою переменную
        yield from asyncio.sleep(3.0)  # асинхронная задержка, она не будет блокировать приложение
    return data  # когда вышли из цикла, в переменной data будет только нужная инфа

# эта функция тоже будет исполняться как сопрограмма. без этого декоратора невозможно получать асинхронно данные через yield from
@asyncio.coroutine
def test():
    # получаем данные асинхронно
    # переменная data заполнится только тогда, когда в функции fetch_data выпадет 6,
    # она выйдет из цикла и вернёт значение
    data = yield from fetch_data()
    print('Bingo!', data)
    loop.stop()  # когда получили данные, останавливаем асинхронный цикл
    # ты не должен останавливать, чтобы каждый раз не запускать цикл при получении данных
    # ты должен просто вернуть данные клиенту    
    
if __name__ == '__main__':
    loop = asyncio.get_event_loop()  # создаём цикл
    asyncio.async(test())  # асинхронно запускаем функцию
    # тебе это надо делать при каждом запросе на какой-то УРЛ
    # По-сути, в обработчике УРЛ ты должен просто вызывать функцию test, 
    # а она уже отошлёт данные клиенту
    loop.run_forever()  # запускаем бесконечный асинхронный цикл
    loop.close()  
    # если он завершится (у меня он завершается, когда получена 6-ка), надо закрыть цикл


Ну или вариант попроще, на клиенте создай функцию, которая будет отправлять AJAX-запрос к серверу и ставь таймер в 3 секунды. Когда вернётся непустое значение, тормози таймер.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
25 нояб. 2024, в 14:41
20000 руб./за проект
25 нояб. 2024, в 14:20
1500 руб./за проект
25 нояб. 2024, в 13:53
150000 руб./за проект