ame*_*hta 6 iphone ruby-on-rails objective-c asihttprequest ios
嘿,我需要使用NSDictionary对象数组发出HTTP POST请求.
但是,当我这样做时,我注意到在服务器端,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];
Run Code Online (Sandbox Code Playgroud)
这是它在服务器(rails)端反序列化时的样子:
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)
Run Code Online (Sandbox Code Playgroud)
我相信这是人们面临的一个普遍问题.所以肯定有一个解决方案.
提前感谢所有评论/答案.
首先,解释一下你所看到的:
addPostValue 方法设计为采用单个值,并调用 [值描述] 将该值转换为字符串。描述方法提供了一个字符串表示形式,这就是您在服务器端看到的内容(如果您向其传递对象,则描述方法也是 NSLog 调用的方法,因此格式应该看起来非常熟悉)。因此,iPhone 被要求发送一个字符串,并且这样做了,并且服务器“正确”地将其显示为字符串。
如果您只想发送单个联系人,则只需为每个键/值对调用“addPostValue”即可 - 即。一次用于电话,再次用于电子邮件等。
如果您想传递多个联系人,您可能需要更好的东西。我不太熟悉 ruby-on-rails,所以可能还有其他解决方案,但将更复杂的数据结构从 iPhone 传递到 Web 服务的常见方法肯定是使用 json。
这里有一个 iphone 的 json 库:
http://code.google.com/p/json-framework/
ruby on Rails 内置了 json 支持。
| 归档时间: |
|
| 查看次数: |
4315 次 |
| 最近记录: |