Прототип javascript frameworks для jquery

Я нашел следующий скрипт, который, по-видимому, написан с использованием прототипа фреймворка javascript.

Event.observe(window, 'load', function() {

    Event.observe( 'btnSubmit', 'click', purchaseCD);

    connectToServer();
});

function connectToServer()
{
    new Ajax.Updater(
        { success: 'CD Count', failure: 'errors' },
        'server_side.php',
        {
            method:     'get',
            onSuccess:  function(transport)
            {
                if (parseInt(transport.responseText)) connectToServer();
            }
    });
}

function purchaseCD()
{
    new Ajax.Updater(
        { success: 'CD Count', failure: 'errors' },
        'server_side.php',
        {
            method:     'get',
            parameters: { num: $('txtQty').getValue() }
    });
}

Кто-нибудь здесь может преобразовать этот скрипт для использования jQuery вместо прототипа? Я вообще не знаю проротипа, поэтому я его не понимаю.


person oshirowanen    schedule 20.12.2010    source источник


Ответы (1)


Ajax.Updater принимает в качестве параметра 1 два контейнера, в которых он будет обновлять успешный или неудачный ответ на запрос к URL-адресу, указанному в параметре 2.

Что делает этот скрипт, так это то, что при загрузке страницы (ниже я перевел его на DOMReady, что не совсем то же самое, но соглашение jQuery) запрос AJAX отправляется на server_side.php. Если он получает ответ, который он понимает, он немедленно отправляет другой запрос, чтобы поддерживать сеанс.

Это похоже на ужасный дизайн. Если вы собираетесь делать что-то подобное, вам определенно нужен тайм-аут между запросами.

Еще одна вещь, которая не очень удобна в этом сценарии, заключается в том, что каждый запрос AJAX обрабатывается одной и той же страницей — server_side.php — с использованием разных параметров для получения инструкций о том, какое действие необходимо выполнить. Было бы чище просто запрашивать разные страницы для разных действий.

$(function() {
    $('#btnSubmit').click(purchaseCD);
    connectToServer();
});

function connectToServer() {
    $.ajax({
        url: "server_side.php",
        success: function(res) {
            $('#CD Count').html(res);
            if(parseInt(res))
                connectToServer();
        },
        error: function(xhr) {
            $('#errors').html(xhr.responseText);
        }
    });
}

function purchaseCD() {
    $.ajax({
        url: "server_side.php",
        success: function(res) {
            $('#CD Count').html(res);
        },
        data: { num: $('#txtQty').val() },
        error: function(xhr) {
            $('#errors').html(xhr.responseText);
        }
    });
}
person David Hedlund    schedule 20.12.2010
comment
Мой сервер имеет время соединения из 120 секунд. Это нормально? - person oshirowanen; 20.12.2010
comment
@oshiro: я не комментировал время ожидания фактического запроса, а скорее задержку между запросами. В исходном коде, если connectToServer завершится должным образом, разумно в течение нескольких миллисекунд, он немедленно отправит другой запрос к connectToServer. Это нагрузит ваш веб-сервер. В приведенном выше коде вызов connectToServer после if(parseInt(res)) следует заменить чем-то вроде setTimeout(connectToServer, 10000);, чтобы вызов выполнялся только каждые 10 секунд, а не несколько раз в секунду. - person David Hedlund; 20.12.2010