2011-10-03 22 views
5

Estoy trabajando en un proyecto en el que he desarrollado un sitio web para una agencia de viaje. Las cosas están mejorando y se genera más tráfico. El problema radica en las tablas de precios generadas lentamente. Mis clientes y yo pensamos que, debido a los fondos disponibles, Memcache debería hacer el truco. Salí como estaba para comenzar, reescribí el antiguo código ajax por el nuevo código jQuery ajax. Algunas otras publicaciones de esta noche cubren un poco este tema.Al enviar datos por ajax, los datos se pierden

ahora tengo el siguiente código que muestra una Tabla del precio para un determinado mes:

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 es un archivo de gran tamaño, la ejecución de muchas consultas y una gran cantidad de pricecalculation se realiza allí. Todo resulta en una tabla HTML con precios. Esa salida, almacenada en data se inyecta en la propiedad innerHTML de un div, en este caso targetElement porque debe ser ajustable.

Me di cuenta, bueno ... cuando tengo la salida correcta en data acabo de disparar otra llamada al WriteCache.php con los datos. Luego, los datos se almacenan en el servidor de Memcache al $cache->set("my_key", $_POST["data"]); (los encabezados se usan y configuran en el pasado para asegurar una 'nueva' visita para el navegador).

Ahora viene la parte difícil ... no importa lo que intento, solo obtengo EXACTAMENTE 4067 caracteres en mi caché. Me he quedado sin opciones en las que puedo pensar. Esta es sólo una pequeña parte de la producción total ... adición, un alert de data.length me mostró en la Tabla del precio para el alojamiento Estoy mirando hacia adentro, la longitud es de 98.858.

¿Tiene alguna sugerencia de qué podría estar causando este extraño comportamiento? ¿Puede ser que los datos se pasen poco a poco? Memcache tiene una opción chunk_size, por defecto está configurado en 8192 (¿Cuántos bytes?, El documentation no se sabe ...)

¡Cualquier ayuda es muy apreciada!

¡Salud!

P.s. memcached la etiqueta debe ser Memcache pero no puedo elegir esa opción ..

actualización El problema es irrelevante para Memcache. Por algún motivo, mis datos se modifican mientras se envían nuevamente. Esto da como resultado un código HTML no válido que, por algún motivo, no se establece en la memoria caché y no se muestra en mi salida (correo a mí mismo) pero cuando presento el resultado (usando éxito: en la segunda llamada) a otra DIV veo el salida 'destrozada' ...

+0

Un colega tuvo un problema similar anteriormente el mes pasado, estaba tratando de enviar más de 1mb de datos al servidor a través de una publicación $ .ajax y siguió fallando. Tenía que subir en pedazos de menos de 1 millón de bytes o se colgaría y no se enviaría. ¿Tal vez tu error está en un lugar similar? –

+0

¿Alguna idea sobre cómo implementar una solución de este tipo? – Ben

+0

Solo una conjetura, pero intente 'data:" accommodationID = "+ accommodationID +" & month = "+ month +" & data = "+ data.serialize(),' – alykhalid

Respuesta

1

Lo he descubierto, me tomó toda la noche ... Mi salida contiene entidades HTML. Y lo has adivinado. Las entidades HTML comienzan con un ampersand que, al mismo tiempo, es el carácter delímetro para datos recuperados por $_GET, $_POST o $_REQUEST. Un simple escape(data) hizo el truco. ¡Gracias a todos los que se tomaron el tiempo para investigar esto!

0

Puede intentar configurar MEMCACHE_COMPRESSED en php.ini o pasarlo como una bandera en la función de configuración a la Memcache::set($key, $var, MEMCACHE_COMPRESSED); para comprimir el valor.

+0

Gracias por su respuesta. Después de probar muchas cosas, he llegado a la conclusión de que 'data' se cambia por alguna razón. Así que no importa lo que estoy tratando de establecer, el resultado es algo roto ... – Ben

+0

Lamento escucharlo. Buena suerte. –

Cuestiones relacionadas