Oye, necesito hacer una solicitud HTTP POST con una matriz de objetos NSDictionary.Cómo utilizar ASIFormDataRequest para http post array de objetos NSDictionary
Cuando hago esto, sin embargo, noto en el lado del servidor que el objeto NSDictionary no se deserializa a un hash. Se deserializa a una cadena, que no es lo que quiero.
Esta es la forma en que envío el parámetro desde el cliente (iPhone): el
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];
Esto es cómo se ve cuando se deserializa en el servidor (rieles): el
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)
Estoy seguro de que este es un problema común que enfrentan las personas. Entonces definitivamente hay una solución para esto.
Gracias de antemano por todos los comentarios/respuestas.
Gracias por la respuesta. Entiendo que JSON es una opción, ¿pero es que la única forma en que los hashes (mapas) se envían como parámetros de publicación? – amehta
Puede usar SOAP o XML simple en su lugar, pero consideraría que JSON es la opción más simple. Al final del día, un http POST simplemente está enviando (casi) texto de forma libre al servidor. Si es solo un simple diccionario, entonces como mencioné, puedes llamar a addPostValue para cada clave/valor (o modificar ASIHTTPRequest para que acepte un diccionario y agregar cada clave/valor), pero para algo más complejo necesitas algo que estructura el datos en una cadena con un formato definido que admite tanto el cliente como el servidor: json es la manera más simple de hacerlo. – JosephH
Ok. Esperaba que hubiera una forma no JSON/XML/SOAP/YAML. Quiero decir, cuando llamo addPostValue, agrego un par de valores clave. Entonces, intuitivamente, pensé que un * valor * podría ser otro Hash. Además, cuando llamo addPostValue, parece que me permite enviar una matriz como parámetro (como se ve en el registro del servidor que publiqué), por lo que a mí me pareció que también debería admitirse un objeto Hash. Supongo que no. – amehta