Вопрос prototype Ajax.Updater проблема

Turtle_Fly
На сайте с 20.09.2007
Offline
33
1208

Приветствую! Делаю телегу сабжем.

Демо тут: http://www.pechati-m.ru/samonabornik/

Как работает: жмем купить, запрос идет в php, при помощи php в сессию передается массив с id товаров. От php возвращается готовый html для информера корзины, и html для самой корзины которая по умолчанию не видна.

На при проверке на хостинге появляется лаг.

В чем лаг:

1. Щелкая на Купить, информер то обновляется, то нет, но в сессию все нужные данные заносятся. 2. Открыв корзину и щелкая Удалить, таже песня.

3. Открыв корзину и щелкнув Очистить корзину - таже песня.

Этот лаг проявляется не всегда, на локальном серваке оч. редко, на хостинге чаще.

Код Ajax.Updater:

function manageCart(task,item,vol) {

var url = 'managecart.php';
var params = 'task=' + task + '&item=' + item + '&vol=' + vol;
var ajax = new Ajax.Updater(
{success: 'cart_content'},
url,
{method: 'get', parameters: params, onFailure: reportError});
}

function reportError(request) {
$F('cart_content') = "An error occurred";
}
function previewCart(task) {
var url = 'managecart.php';
var params = 'preview=' + task;
var ajax = new Ajax.Updater(
{success: 'preview_cart'},
url,
{method: 'get', parameters: params, onFailure: reportError1});
}
function reportError1(request) {
$F('preview_cart') = "An error occurred";
}

Код managecart.php:

header('Content-type: text/html; charset=windows-1251');

require_once("fns_main.php");
include("cart.class.php");
session_start();
$items = $_SESSION["cart"];
$cart = new Shopping_Cart($items);
// Retrieve the parameters
$task = $_GET['task'];
$item = $_GET['item'];
$volume = $_GET['vol'];
$preview = $_GET['preview'];

if ($task == "add") {
$cart->addToCart($item,$volume);
$_SESSION["cart"] = $cart->getCart();
//echo "Add";
viewCart();

} elseif($task == "delete") {
$cart->deleteFromCart($item,$volume);
$_SESSION["cart"] = $cart->getCart();
viewCart();
}
elseif($task == "clear") {
unset($_SESSION["cart"]);
//echo 'Cart empty!';
viewCart();
}
if($preview == "preview_cart") {
$_SESSION["cart"] = $cart->getCart();
preview_cart();
}

cart.class.php

class Shopping_Cart {

private $cart;

function __construct($cart="") {
$this->cart = $cart;
}

function getCart() {
return $this->cart;
}

function addToCart($item, $volume) {
//echo $volume;
if(isset($this->cart[$item])) {
for ($i = 1; $i <= $volume; $i++)
{
$this->cart[$item]++;
}
} else {
$this->cart[$item] = 1;
}
}

function deleteFromCart($item, $volume) {
//echo $volume;
if(isset($this->cart[$item])) {
for ($i = 1; $i <= $volume; $i++)
{
$this->cart[$item]--;
}
if($this->cart[$item] == 0) {
unset($this->cart[$item]);
}
}
}

}
... и т.д.

Прошу помощи! =)

лазерные станки для резки и гравировки, купить в Москве (http://laser911.ru/). изготовление табличек для офиса (http://www.shtampuem.ru/tablichki/).
КМ
На сайте с 08.03.2007
Offline
66
#1

А что в логах ?

Turtle_Fly
На сайте с 20.09.2007
Offline
33
#2

В логах сервака все пучком никаких ошибок нет одни 200 =)

P
На сайте с 08.03.2007
Offline
250
#3

Дублируйте в лог-файл всё, что отдате клиенту по ajax запросу. Причём - разные файлы для разных запросов (). Включите error_reporting(E_ALL); Смотрите в firebug ход выполнения запросов (надо отметить опцию ShowXMLHTTPRequest), и делайте POST запросы - проще анализировать.

Turtle_Fly
На сайте с 20.09.2007
Offline
33
#4

Спасиб за советы, сейчас попробую для разных запросов разные файлы. Скажите, а существует ли внятное руководство по этой библиотеке на русс. типа Prototype for Dummies?

Kolyaj
На сайте с 28.03.2006
Offline
69
#5
Turtle_Fly
На сайте с 20.09.2007
Offline
33
#6

Ну вроде разобрался. Сделал запросы к разным скриптам, но все равно есть лаг, но уже другого вида. В опчем есть такая проблема как - Задержка (Latency). Т.е. даже если я обращаюсь к разным скриптам из разных функций, задержка все равно будет и возможны глюки.

Кому интересно тут http://ru.sun.com/java/ajax_faq/index.html#usability и тут http://richui.blogspot.com/2005/09/ajax-latency-problems-myth-or-reality.html

В общем подлечил, использовав таймер на функцию которая у меня срабатывает всегда (Апдейт информера телеги). В идеале наверное стоит на все функии, подгружающие данные, поставить свой таймер. Колдую дальше. ☝

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий