Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > Prototype & Script.aculo.us
Prototype & Script.aculo.us Forum d'entraide sur les frameworks Prototype et Script.aculo.us
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/09/2006, 12h18   #1
Invité de passage
 
Inscription : mai 2005
Messages : 2
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 2
Points : 1
Points : 1
Par défaut [Prototype] Taille limite reponse xml du serveur

Bonjour.
Je viens vers vous parce que la je bloque vraiment.
Je m'explique.
J'ai un serveur qui repond a une requete ajax en envoyant des données au format Xml.
Sous FF, je les parse sans problemes, mais sous IE, il ne trouve aucun noeud de mon fichier XML.
Le problème est que cela marchait avant.

Je me suis rendu compte qu'a partir d'une certaine quantité de données, IE merde. Quand j'affiche la reponse en text, il manque la fin du fichier (environ 8000 caracteres), ce qui fait un fichier Xml non valide, raison pour laquelle il ne peut pas trouver les noeuds. Le plus drole est que quand je veux afficher les derniers caracteres (substr), il les trouve sans problemes

Par conséquent il est aussi impossible d'afficher une chaine de caracteres de plus de 8000 caracteres avec la commande alert sous IE...il s'arrete largement avant...surement pas sécurité

Avez vous deja rencontrer ce genre de probleme et si oui, avez vous une solution.

Merci
JoTitan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2006, 15h23   #2
Expert Confirmé Sénior
 
Avatar de denisC
 
Inscription : février 2005
Messages : 4 069
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2005
Messages : 4 069
Points : 4 698
Points : 4 698
Citation:
Envoyé par JoTitan
Avez vous deja rencontrer ce genre de probleme et si oui, avez vous une solution.
Non, jamais vu

Tu peux nous passer les exemples qui ne fonctionnent pas?
denisC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2006, 16h24   #3
Invité de passage
 
Inscription : mai 2005
Messages : 2
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 2
Points : 1
Points : 1
Ben pour se rendre compte que le alert de ie n'affiche pas tout, j'ai collé une longue chaine dans un alert et j'ai regardé.

Sinon, pour le reste, c'est impressionant, car la fonction anaylse bien quand il n'y a pas un max de données mais des qu'on augmente, ca va plus.

La structure du fichier est la suivante

Code :
1
2
3
4
5
<header param1="" param2="">
<option name="" value="">
<option name="" value="">
<option name="" value="">
</header>
Pour la fonction javascript :

Code :
1
2
3
4
5
6
7
8
 
function analyseUsersOfGroup(){
if (XhrObj.readyState == 4 && XhrObj.status == 200){
node = XhrObj.responseXML;
 
header = node.getElementsByTagName('header')[0]; 
 
idIn = header.getAttribute('param1');
Je ne marque pas la fin, ca plante a la derniere ligne (idIn) car le header ne correspond a rien (il ne le trouve pas). Quand j'affiche la reponse (responseText) avec de longues données, la fin n'apparait pas...
JoTitan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 15h55   #4
Invité régulier
 
Inscription : septembre 2006
Messages : 20
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 20
Points : 9
Points : 9
Bonjour,

Meme probleme de mon coté, la taille de la reponse semble etre limitée à 8Ko.
Je sais que c'est un mauvais design de devoir passer bcps de données par ajax mais bon la ca m'arrangerait bien quand meme.

Est ce que quelqu'un a progressé sur le sujet?

Merci!
- ju
jfourment est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2007, 12h33   #5
wkd
Nouveau Membre du Club
 
Inscription : janvier 2004
Messages : 112
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 112
Points : 33
Points : 33
t'as regardé dans ton fichier de configuration la taille d'envoie par POST???

c'est le fichier qui permet aussi de modifier le timeout
__________________
Le forum est là pour ceux qui ont déjà passé des heures et des heures à chercher la petite bête et qui n'ont pas encore trouvé le moyen de l'attraper...
wkd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2007, 13h22   #6
Invité régulier
 
Inscription : septembre 2006
Messages : 20
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 20
Points : 9
Points : 9
J'ai résolu le pb de mon coté.
L'implementation coté server est en java (sur tomcat), apparemment il suffisait d'étendre le buffer de l'objet Response sur le serveur.
Donc ca marche pour moi ... jusqu'a la prochaine limitation!!
jfourment est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 14h18   #7
Invité régulier
 
Inscription : octobre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 22
Points : 8
Points : 8
Bonjour,

est-ce que quelqu'un a eu le même problème en PHP ? Parce que j'ai comme l'impression que j'ai le même souci.

J'ai une table de tous les pays du monde avec leurs codes respectifs, et je souhaite afficher mon formulaire avec une listbox contenant justement tous les codes pays et leur description. Ce qui fait en gros 245 "<option value="CODE">Country descr</option>".

Lors que je limite ma query à tous les codes commençant par A, ça passe, dès que j'augmente un peu trop.... ça casse !

Heeeeelp

Tanhys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 13h21   #8
Invité régulier
 
Inscription : octobre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 22
Points : 8
Points : 8
Personne n'a eu le même problème ? J'peux pas l'croire ça !! j'suis complètement bloqué et si je ne trouve pas de solution, j'suis bon pour repartir depuis le début en abandonnant AJAX :-(
Tanhys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2007, 09h25   #9
Membre habitué
 
Inscription : mars 2006
Messages : 186
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : mars 2006
Messages : 186
Points : 120
Points : 120
Incomprehensible je dois dire ! je charge des listes de clients enormes dans mon application ( ~20 000) sans aucun probleme... C'est quoi comme base de données ? Personnelement je suis sur une sybase SQL Anywhere, le probleme provient peut-etre de la !
__________________
Pierre : abusé, regarde par la fenêtre, les gosses ils passent leur vie à faire du vélo dehors ...
tom : ils ont pas de pc ou quoi ?
highman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2007, 09h51   #10
Invité régulier
 
Inscription : octobre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 22
Points : 8
Points : 8
ça me paraitrait bizarre que ça vienne de la base de données quand même... mais je vais quand même regarder.

C'est une base MySQL 5.

Comme dit... lorsque je limite le résultat, ça passe et sitôt que je passe un certain seuil... crack, c'est fini :-(
Tanhys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2007, 09h52   #11
Invité régulier
 
Inscription : octobre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 22
Points : 8
Points : 8
De manière un peu plus générale, en fait, si quelqu'un sait s'il y a réellement une limite de la taille des données qu'un navigateur peut récupérer en POST Data depuis un serveur distant, j'aimerais beaucoup la connaitre.
Tanhys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2007, 09h00   #12
Invité régulier
 
Inscription : octobre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 22
Points : 8
Points : 8
Ça y est, j'ai ENFIN la confirmation qu'il y a bien une taille limite pour les headers renvoyés depuis le serveur.
Dans l'outils que je suis en train de développer, j'utiliser Prototype, et la fonction json_encode pour dialoguer entre le client et le serveur. Pour ceux qui se demandent quel est l'intérêt, c'est l'aisance avec laquelle Prototype gère des réponses encodées au format JSON et qui permet donc de récupérer aisément une réponse et de la traiter comme un objet.

Bref, dans mon script côté serveur, je faisais un:
Code :
header("X-JSON: ".json_encode($object->$_POST["tbi_method"]($method_params)));
et côté client, je faisais un:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var myAjaxRequest = new Ajax.Request('lib/ajax_engine/ajax_dynamic_scripting_engine.php',
		{
	        method: 'POST',
	        parameters: $H({'src_object_type': src_object_type, 'src_object_name': src_object_name, 'src_object_id': src_object_id, 'tbi_method': tbi_method, 'tbi_method_params':tbi_method_params}).toQueryString(),
	        onComplete: function(response, jsonObject)
			{
				if(null == jsonObject)
	            {
	                //alert("JSON response is null");
	                //$('xml_text').value = response.responseText;
	            }
	            else
	            {
	            	if(handleHTTPResponseJSON(jsonObject))
	            	{
	            		if(jsonObject.CONTEXT.UPDATE == "true")
						{
							$('context_src_object_type').value = src_object_type;
							$('context_src_object_name').value = src_object_name;
							$('context_src_object_id').value = src_object_id;
							$('context_tbi_method').value = tbi_method;
							$('context_tbi_method_params').value = tbi_method_params;
 
						}
	            	}
 
	            }
			}
	    });
...et puis, ce matin, je suis tombé sur cet article. Du coup, j'ai bien vite essayé de changer mon script côté serveur et ai remplacé mon
Code :
header("X-JSON: ".json_encode($object->$_POST["tbi_method"]($method_params)));
par un
Code :
echo json_encode($object->$_POST["tbi_method"]($method_params));
et là... comme par miracle l'ensemble de ma réponse est arrivée jusqu'au client. Bien entendu, mon code côté client n'est pas fait pour récupérer l'objet json dans le body de la réponse, mais je ferai en sorte que ça fonctionne et mon problème sera résolu !!

Voili, voilou les p'tits loups !
Tanhys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 06h50   #13
Invité régulier
 
Inscription : octobre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 22
Points : 8
Points : 8
Depuis le 1er mai, Prototype a sorti une version 1.5.1 de sa bibliothèque de prototypage Javascript. Ainsi, grâce à cette version, il devient possible de faire ceci:


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var myAjaxRequest = new Ajax.Request('lib/ajax_engine/ajax_dynamic_scripting_engine.php',
{
    method: 'POST',
    parameters: $H({'src_object_type': src_object_type, 'src_object_name': src_object_name, 'src_object_id': src_object_id, 'tbi_method': tbi_method, 'tbi_method_params':tbi_method_params}).toQueryString(),
 
	        onComplete: function(response, jsonObject)
		{
			if(null == jsonObject)
                       {
	                    $jsonObject = response.responseText.evalJSON();
                       }
                       else
                       {
                            ...
	               }
                }
	}
});
Portez votre attention sur la fonction evalJSON() appliquée directement à un objet de type "String". Apparavant, cette méthode n'était disponible que sur l'objet response mais pas sur n'importe quelle chaîne de caractères. Ainsi, il devient possible de dialoguer aisément avec le serveur grâce à ce formalisme d'objets MAIS sans limite de taille de la réponse !!!

Elle est pas belle la vie ?
Tanhys est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h44.


 
 
 
 
Partenaires

Hébergement Web