2011-06-27 5 views
0

Je travaille sur une application flexible et j'ai besoin d'appeler des données avec une méthode synchrone. Après quelques recherches, j'ai trouvé un code d'adobe qui utilise ajax et une interface externe. Ce grand.ajax POST to servlet: paramètre nul

the code from adobe

Lorsque j'envoie des données avec la méthode GET, le servlet lire les paramètres et imprimer quelques infos (pour vérifier). Mais quand j'envoie des données avec la méthode POST, le servlet reçoit la demande, mais les paramètres ont disparu.

exemples:

SERVLET - GET

System.out.println("recieved GET"); 
Map attrib = request.getParameterMap(); 
System.out.println("parameters: " + request.getParameterMap().size()); 
for(Object key: attrib.keySet()){ 
    System.out.println("key: "+key.toString() +" - "+attrib.get(key)); 
} 

SERVLET - POST

System.out.println("recieved POST"); 
Map attrib = request.getParameterMap(); 
System.out.println("parameters: " + request.getParameterMap().size()); 
for(Object key: attrib.keySet()){ 
    System.out.println("key: "+key.toString() +" - "+attrib.get(key)); 
} 

FLEX méthode GET

var ajax:Ajax = new Ajax(DATABASEURL + "?username=test); 
ajax.requestType = AjaxRequestType.GET; 
ajax.async = false; 
var result:String = ajax.send(); 

imprimé par le servlet:

recieved GET 
parameters: 1 
key: username - [Ljava.lang.String;@4977e2 

FLEX méthode POST

var ajax:Ajax = new Ajax(DATABASEURL); 
ajax.requestType = AjaxRequestType.POST; 
ajax.async = false; 
var result:String = ajax.send("username='test'"); 

imprimé par le servlet:

recieved POST 
parameters: 0 

Qu'est-ce qui ne va pas?

Si la demande est envoyée, pourquoi il n'y a pas de paramètre maintenant?

Si quelqu'un peut m'aider, ce serait génial, parce que j'ai tellement cherché sur google pour que google puisse me bloquer pour le spam.

edit: Le produit ne peut pas être imprimé? Donc ...

+1

Pourquoi avez-vous besoin d'une requête synchrone? Je pense essayer d'utiliser JavaScript de cette façon w/une application Flash ne demande que des problèmes. – JeffryHouser

+0

L'application doit charger certaines données à partir de la servlet. L'objet httpService le fait parfaitement sauf un détail .... le résultat provient de l'événement result. Ainsi, la classe (data) qui utilise cette classe (base de données) qui utilise ce httpService reçoit un objet nul et lorsque cette classe (base de données) reçoit le résultat, il est trop tard. La classe (data) obtient déjà un résultat.Le mauvais résultat, mais un résultat de toute façon. L'appel d'une manière synchrone supprime ce problème. la fonction retourne la vraie valeur. – blaazzze

+0

De quoi parlez-vous ?! Il est impossible de faire une requête synchrone sans une implication sérieuse sur le front-end. Il n'y a pas * aucune raison * d'avoir besoin d'un appel synchrone à un service back-end. Je pense que ce que vous devez faire est de créer une meilleure architecture pour ce que vous essayez de faire (que je ne comprends toujours pas) au lieu d'utiliser un hack massif qui, selon toute probabilité, va casser autre chose plus tard ... –

Répondre

-1

C'est OK, j'ai trouvé le problème. C'était le code javascript du adobe page.

J'ai ajouté

xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xmlHttp.setRequestHeader("Content-length", params.length); 
xmlHttp.setRequestHeader("Connection", "close"); 

avant la

xmlHttp.send(params); 

et maintenant, j'ai une bonne réponse de la servlet ...

recieved POST 
parameters: 1 
key: username - [Ljava.lang.String;@1cebc9f 

Il est assez cool que n'utilisait pas flex avec javascript ce bug, mais seulement un requestReader manquant.

+0

Il n'y a aucune raison d'utiliser ajax avec Flex. À quoi ça sert?! –