嘿,我需要使用NSDictionary對象數組發出HTTP POST請求。如何使用ASIFormDataRequest將http post數組作爲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 2010-09-24 05:11:44
您可以使用SOAP或純XML來代替,但我認爲JSON是更簡單的選項。在一天結束時,一個http POST只是發送(幾乎)自由文本到服務器。如果它只是一個簡單的單個字典,那麼正如我所提到的,您可以爲每個鍵/值調用addPostValue(或修改ASIHTTPRequest,以便接受字典並添加每個鍵/值),但對於更復雜的任何事情,您需要一些構成數據轉換爲客戶端和服務器支持的定義格式的字符串 - json是最簡單的常見方式。 – JosephH 2010-09-24 05:39:25
好的。我希望有一個非JSON/XML/SOAP/YAML的方式。我的意思是,當我調用addPostValue時 - 我添加了一個鍵值對。所以,直覺上,我認爲*值*可能是另一個哈希。另外,當我調用addPostValue時 - 它似乎允許我發送一個數組作爲參數(如我在發佈的服務器日誌中看到的那樣),所以對我來說應該也支持Hash對象。我猜不會。 – amehta 2010-09-24 05:48:52