Эй, мне нужно сделать запрос HTTP POST с массивом объектов NSDictionary.Как использовать ASIFormDataRequest для http post array объектов NSDictionary
Однако, когда я это делаю, на стороне сервера я замечаю, что объект NSDictionary не десериализуется в хэш. Он десериализуется в строку - это не то, что я хочу.
Это, как я посылаю параметр от клиента (IPhone) сторона:
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];
Вот как это выглядит, когда он десериализируется на сервере (рельсы) сторона:
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)
Я уверен, что это общая проблема, с которой сталкиваются люди. Таким образом, для этого определенно есть решение.
Заранее благодарим за все комментарии/ответы.
Спасибо за ответ. Я понимаю, что JSON - это вариант, но только, что хеши (карты) отправляются только как параметры сообщения? – amehta
Вместо этого вы можете использовать SOAP или простой XML, но я бы рассмотрел более простой вариант JSON. В конце дня http POST просто отправляет (почти) текст свободной формы на сервер. Если это простой простой словарь, то, как я уже говорил, вы можете вызвать addPostValue для каждого ключа/значения (или изменить ASIHTTPRequest, чтобы он принимал словарь и добавлял каждый ключ/значение), но для чего-то более сложного вам нужно что-то, что структурирует данных в строку с определенным форматом, который поддерживает как клиент, так и сервер. json - это самый простой общий способ сделать это. – JosephH
Хорошо. Я надеялся, что существует способ не JSON/XML/SOAP/YAML. Я имею в виду, когда я вызываю addPostValue - добавляю пару значений ключа. Итак, интуитивно, я понял, что * значение * может быть другим хэшем. Кроме того, когда я вызываю addPostValue - похоже, он позволяет мне отправлять массив в качестве параметра (как видно из журнала сервера, который я опубликовал), поэтому мне казалось, что объект Hash также должен поддерживаться. Наверное, нет. – amehta