Usted puede transferir datos a su servidor usando las galletas, pero cualquier puesta en práctica que las usa será seriamente limitada. Las galletas tienen un tamaño máximo de 4k, y cada dominio puede fijar solamente 20 de ellos, que significa que cada petición va a ser tamaño-limitada. AJAX Galleta-basado es el más útil cuando su sitio se diseña para él, porque sus limitaciones hacen duro utilizarlo como retraso. La funcionalidad básica es proporcionada fijando una galleta, cargando una imagen, y entonces la interrogación en un intervalo mientras que espera la respuesta para aparecer. La puesta en práctica es simple; para hacer algo además de alertar el contenido del resultado, usted acaba de fijar a su propio tratante de encargo del acontecimiento del onComplete. Se ha llamado un ejemplo donde el servidor vuelve la entrada y el número de épocas él se demuestra en los 2 listados siguientes. El Javascript del ejemplo se demuestra en el listado 1 y el código de PHP, que lee la galleta y después fija una respuesta, se demuestra en el listado 2.
Enumerar 1 AJAX Galleta-Accionados
| 1 < HTML > 2 < cabeza > 3 < title>Cookie Test</title > 4 5 < escritura type="text/javascript" > 6 función CookieRequest() {} 7 CookieRequest.prototype = { intervalo 8: 500. 9 tentativas: 5. attemptCounter 10: 0. llamada 11: function(url, payload) { 12 var d = Date() nuevo; 13 var i = Image() nuevo; 14 this.setCookie('CR', payload); 15 i.src = URL + '?u = ' + d.getTime(); uno mismo de 16 var = esto; 17 this.timerId = setTimeout(function() 18 {self.read(); }, this.interval); 19 }, 20 leyeron: function() { 21 this.attemptCounter++; 22 //comprobación para datos 23 datos del var = this.getCookie('CR '); 24 si (datos! = falso) { 25 this.attemptCounter = 0; 26 this.onComplete(data); 27 de vuelta verdad; 28 } 29 30 //comprobación para error 31 si (this.attemptCounter > this.attempts) { 32 this.onError(); 33 } { uno mismo de 34 var = esto; 35 this.timerId = setTimeout(function() {self.read(); }, 36 this.interval); 37 } 38 }, onComplete 39: function(result) { alert(result) 40 41 }, onError 42: function() { 43 la ma's alert('Request medida el tiempo fuera de '); 44 }, setCookie 45: el function(name, valor, expira) { 46 document.cookie = nombre + "=" + escape(value) + ¿47 ((expira)? "; expira = "+ 48 expires.toGMTString(): ""); 49 }, getCookie 50: function(name) { docCookie de 51 var = document.cookie.split("; "); 52 para (var i=0; i < docCookie.length; i++){ pedazo de 53 var = "="); de docCookie[i].split( 54 si nombre del == (piece[0 ]) { 55 unescape(String(piece[1 de vuelta ]). replace(/\+/g, "")); 56 } 57 } 58 falsos de vuelta; 59 } 60} test() de 61 funciones { cr de 62 var = CookieRequest() nuevo; 63 cr.call('cookie.php', datos 'Some del ejemplo '); 64} 65 </escritura > 66 </cabeza > 67 < cuerpo > 68 < un href='javascript:test()'>Test</a > 69 </cuerpo > |
|
|
En el listado 1, la funcionalidad galleta-accionada de AJAX se envuelve dentro de la clase CookieRequest del Javascript. Las peticiones al servidor se hacen con el método de la llamada (líneas 11-19). El método de la llamada toma un URL a el cual enviar la petición. También toma una carga útil (el contenido que deseamos enviar al servidor), que se envía en la galleta de la petición. El método entonces utiliza el método del setCookie para fijar una galleta nombrada CR (línea 14); después crea un nuevo objeto de la imagen y fija su src al URL solicitado (línea 15). El método acaba comenzando un contador de tiempo, que funciona el método leído cada 500 milisegundos.
El método leído (líneas 2038) comprueba para saber si hay la presencia de la galleta del CR (líneas 2324). Si existe, los datos en ellos se pasan al método del onComplete (línea 26). Si los datos no están presentes, comprobamos para saber si hay errores; esto es hecha comparando el número de cheques que hemos terminado contra los cheques máximos fijados en la característica de las tentativas (línea 31). Si hay un error, se llama el método del onError (línea 32). Si no hay error presente, comenzamos otro contador de tiempo para hacer el cheque siguiente (líneas 34-35).
Las líneas 39-44 contienen los métodos que usted eliminará al usar la clase. Se llama el método del onComplete cuando los datos se cargan con éxito. Éste es el equivalente de la característica del servicio repetido en la clase de HttpClient. Se llama el método del onError si la petición no termina con éxito; por supuesto, usted podría dejar esto como alarma, pero, en la mayoría de los casos, usted deseará proporcionar un mensaje de error más comprensible a sus usuarios o aún revisar la petición.
La clase de CookieRequest también contiene los métodos del ayudante para ocuparse de conseguir y los trabajos del setCookie de las galletas que fijaban (líneas 45-49) fijando el valor de document.cookie a a urlencoded la secuencia en el formato de los trabajos del getCookie de la galleta name=value. (líneas 50-59) partiendo document.cookie en una porción para cada galleta (las galletas se separan por ";") y entonces colocando sobre estas piezas que buscan una galleta con el nombre especificado. Si se encuentra un nombre que empareja, se vuelve el valor; si no, falso se vuelve.
La página de PHP que se utiliza con Listing1 se demuestra en Listing2. Se utiliza como el URL en el método de la llamada y procesa la carga útil se fija que; entonces fija una respuesta para leído al gancho agarrador.
Enumerando 2 - Página del servidor de PHP para manejar una petición de la galleta AJAX
| 1 <?php session_start() 2; 3 si (!isset($_SESSION['i ' ])) { 4 $_session['i ' ] = 0; 5 } 6 si (isset($_COOKIE['CR ' ])) { 7 $_session['i']++; 8 setcookie('CR', 'Server responden: ' $_SESSION['i '].', 9 ' $_COOKIE['CR ' ]); 10} 11? > |
Este código de PHP proporciona la funcionalidad básica necesitada para obrar recíprocamente con peticiones galleta-basadas de AJAX. Utiliza sesiones de PHP para almacenar un contador e incrementos él mientras que se hace cada petición. Pues usted amplía este código, usted podría utilizar diversas páginas de PHP para decidir qué acción a realizarse, o usted podría incluir esa información en la galleta que se envía del cliente. Líneas disposición básica de la sesión de la manija de 2-5, fijando opuestamente a 0 si ésta es la primera llamada. Líneas manija de 6-10 la comprobación de la galleta del cliente y el enviar de la respuesta. Esto es hecha fijando una galleta que entonces sea enviada con la respuesta (línea 8-9). Si usted desea manejar respuestas grandes del servidor, usted necesitaría incluir código para partir los datos entre las galletas múltiples.
|
|