Проверка нескольких полей из mysql с помощью jquery AJAX за один вызов - PullRequest
0 голосов
/ 17 марта 2011

У меня есть страница, которая, кажется, в полном рабочем состоянии, но у меня есть серьезные проблемы с производительностью (например, 30-секундная задержка из-за этих вызовов) из-за того, что я предполагаю, что слишком много отдельных запросов POST на сервер.

Правильно ли я считаю, что есть какой-то способ сделать все это за один вызов и что это повысит производительность, и какой самый простой способ сделать это?Возможно, мое использование eval () является частью проблемы - или, возможно, мой веб-хост просто дерьмо.

        function startCheckAchs(){
            //hide the loading alert
            $(document).ajaxStop(function(){
                $(this).unbind("ajaxStop");
                popup('loadingAlert');
            });
            //load lifeTimeBaked
            lifeTimeBaked = loadAch("lifetimebaked");
            loadAch("ach_started", "#achStarted", "achstarted");
            loadAch("ach_round1", "#achRound1", "achround1");
            loadAch("ach_round2", "#achRound2", "achround2");
            loadAch("ach_round3", "#achRound3", "achround3");
            if( rewards == 1) {
                loadAch("ach_baked100", "#achBaked100", "achbaked100");
                loadAch("ach_baked500", "#achBaked500", "achbaked500");
                loadAch("ach_baked1000", "#achBaked1000", "achbaked1000");
                loadAch("ach_nobread", "#achNoBread", "achnobread");
                loadAch("ach_nodough", "#achNoDough", "achnodough");
                loadAch("ach_noflour", "#achNoFlour", "achnoflour");
                loadAch("ach_allach", "#achAllAch", "achallach");
            }
        }

function loadAch(ach, achDiv, achVar){
            $.ajax({
                type: "POST",
                url: "scripts/loadach.php",
                data: {"achievement" : ach},
                dataType: "text",
                success: function(result){
                    if ( achDiv && achVar && result == 1){
                        $(achDiv).show();
                        eval(achVar + " = 1");
                        return result;
                    } else {
                        return result;
                    }
                }
            });
        }

Loadach.php:

$achievement=trim($_POST['achievement']);
$user =  $_SESSION['userid'];

$query = "SELECT $achievement FROM breadusers WHERE userid='$user'";
$link =@mysql_query($query);
if(!$link){
    die('Could not query:' . mysql_error());
}   
echo mysql_result($link, 0);
?>

Ответы [ 4 ]

0 голосов
/ 17 марта 2011

В настоящее время вы загружаете достижения по отдельности, в то время как вы должны делать что-то вроде:

<?php
$query = "SELECT ach_started, ach_round1 FROM breadusers WHERE userid='$user'";
$link = mysql_query($query);
$results = mysql_fetch_assoc($link);

echo json_encode($results);
?>

Затем, в своем коде javascript, проанализируйте ответ JSON (установка dataType: «json» должен работать), зациклите возвращаемый объект (имеет ключи, такие как ach_started, ach_round1 и т. Д. И т. Д.) И при необходимости отобразите / скройте div .

0 голосов
/ 17 марта 2011

К сожалению, вам придется изменить это.

  1. Запросы SQL медленные.
  2. Множество запросов замедляют работу.

Посмотрите, можете ли вы сгруппировать все данные для пользователя в вашей базе данных. Таким образом, вы можете сделать один выбор для всех нужных вам данных.

0 голосов
/ 17 марта 2011

Вы можете использовать многомерный массив и заполнять его необходимыми данными, отправлять массив с ajax в код php, а затем вы можете перебирать массив в коде php и выводить желаемые результаты.

Таким образом, вы будете делать только 1 вызов ajax каждый раз, но при этом будете получать те же результаты. может быть быстрее, но я не проверял это. =)

0 голосов
/ 17 марта 2011

Большинство браузеров имеют ограничение на число одновременных запросов к серверу, которые они могут обработать.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...