При отправке данных через ajax, данные теряются - PullRequest
5 голосов
/ 03 октября 2011

Я работаю над проектом, где я разработал веб-сайт для путешествий. Все становится лучше и генерируется больше трафика. Проблема заключается в медленно генерируемых ценовых таблицах. Я и мои клиенты решили, что из-за имеющихся средств memcache должен справиться с задачей. С самого начала я переписал старый ajax-код с помощью нового jQuery ajax-кода. Другие посты этого вечера немного освещают эту тему.

Теперь у меня есть следующий код, который показывает таблицу цен на определенный месяц:

function ShowPriceTable(targetElement, accommodationID, month)
{
    $.ajax({
        type:   "POST",
        url:    basePath + "/ajax/GetPriceTable.php",
        data:   "accommodationID="+accommodationID+"&month="+month,
        success: function(data){
            $("#"+targetElement).html(data);

            $.ajax({
                type:   "POST",
                url:    basePath + "/ajax/WriteCache.php",
                data:   "accommodationID="+accommodationID+"&month="+month+"&data="+data,
            });
        }
    });         
}

GetPriceTable.php - это большой файл, выполняющий много запросов, и там выполняется много расчета цены. Все это приводит к HTML-таблице с ценами. Этот вывод, сохраненный в data, вводится в свойство innerHTML элемента div, в данном случае targetElement, поскольку он должен быть настраиваемым.

Я понял, хорошо ... когда у меня правильный вывод в data, я просто запускаю еще один вызов WriteCache.php с данными. Затем данные сохраняются на сервере memcache с помощью $cache->set("my_key", $_POST["data"]); (заголовки используются и устанавливаются в прошлое, чтобы обеспечить «новое» посещение браузера).

Теперь самое сложное ... независимо от того, что я пробую, в моем кеше только 4067 символов. У меня закончились варианты, которые я могу придумать. Это только небольшая часть общего объема производства ... Сложение , alert из data.length показало меня в таблице цен на жилье, в котором я ищу, длина 98,858.

Есть ли у вас предположения, что может быть причиной этого странного поведения? Может быть, данные передаются по крупицам? Memcache имеет опцию chunk_size, по умолчанию она установлена ​​на 8192 (байт, я полагаю?

Любая помощь очень ценится!

Ура!

P.s. тэг memcached должен быть memcache, но я не могу выбрать эту опцию ..

Обновление Проблема не имеет отношения к memcache. По какой-то причине мои данные меняются, пока они отправляются снова. В результате получается недопустимый HTML, который по какой-то причине не помещается в кэш и не отображается в моих выходных данных (по почте самому себе), но когда я вывожу результат (используя success: во втором вызове) в другой DIV, я вижу «искаженный» вывод ...

Ответы [ 2 ]

1 голос
/ 04 октября 2011

Я понял, это заняло у меня весь вечер, хотя ... Мой вывод содержит HTML-сущности. И вы уже догадались. HTML-сущности начинаются с амперсанда, который в то же время является символом-разделителем для данных, полученных с помощью $_GET, $_POST или $_REQUEST. Простой escape(data) сделал свое дело. Спасибо всем, кто нашел время, чтобы покопаться в этом!

0 голосов
/ 03 октября 2011

Вы можете попробовать установить MEMCACHE_COMPRESSED в php.ini или передать его в качестве флага в функции набора а-ля Memcache::set($key, $var, MEMCACHE_COMPRESSED); для сжатия значения.

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