Hey, j'ai besoin de faire une requête HTTP POST avec un tableau d'objets NSDictionary. Lorsque je fais cela, cependant, je remarque du côté serveur que l'objet NSDictionary n'est pas désérialisé en un hachage. Il est désérialisé en une chaîne - ce qui n'est pas ce que je veux.Comment utiliser ASIFormDataRequest pour http post tableau d'objets NSDictionary
Voilà comment j'envoie le paramètre du client (iPhone) côté:
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
for (ABContact *c in contactsWithEmailsOrPhones){
NSString *phoneNumber = [[ABContactsHelper class] contactPhoneNumber:c];
NSString *email = [[c emailArray] objectAtIndex:0];
NSLog(@"looping: %@, %@", phoneNumber, email);
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
phoneNumber,
@"phone",
email,
@"email",
[c firstname],
@"firstname",
[c lastname],
@"lastname", nil];
[request addPostValue:dict forKey:@"contacts[]"];
}
[request setDelegate:self];
[request startAsynchronous];
C'est à quoi il ressemble quand il est désérialisé sur le serveur (rails) côté:
Started POST "/app/find_friends" for 67.164.97.48 at Thu Sep 23 14:40:37 -0700 2010
Processing by app#find_friends as HTML
Parameters: {"contacts"=>["{\n email = \"xx\";\n firstname = xx;\n lastname = xx;\n phone = \"xx\";\n}", "{\n email = \"xx\";\n firstname = xx;\n lastname = xx;\n phone = \"xx\";\n}"]}
Completed 200 OK in 0ms (Views: 0.3ms | ActiveRecord: 0.0ms)
Je suis sûr que c'est un problème commun auquel les gens font face. Donc, il y a certainement une solution pour cela.
Merci d'avance pour tous les commentaires/réponses.
Merci pour la réponse. Je comprends JSON est une option, mais est-ce que la seule façon hash (cartes) sont envoyés en tant que paramètres post? – amehta
Vous pouvez utiliser le XML SOAP ou XML à la place, mais je considérerais JSON comme l'option la plus simple. À la fin de la journée, un POST http envoie juste (presque) du texte libre au serveur. Si c'est juste un simple dictionnaire, comme je l'ai mentionné, vous pouvez appeler addPostValue pour chaque clé/valeur (ou modifier ASIHTTPRequest afin qu'il accepte un dictionnaire et ajouter chaque clé/valeur), mais pour quelque chose de plus complexe, vous avez besoin de quelque chose données dans une chaîne avec un format défini que le client et le serveur prennent en charge - json est la manière la plus simple de le faire. – JosephH
Ok. J'espérais qu'il y avait une manière non JSON/XML/SOAP/YAML. Je veux dire, quand j'appelle addPostValue - j'ajoute une paire de valeur de clé. Donc, intuitivement, j'ai pensé qu'une * valeur * pourrait être un autre Hash. De plus, quand je l'appelle addPostValue - il semble que cela me permet d'envoyer un tableau en tant que paramètre (comme on le voit dans le journal du serveur que je posté), donc pour moi, il semblait être un objet Hash doit également être pris en charge. Je suppose que non. – amehta