2011-08-30 42 views
1

我有一個簡單的問題,同時向服務器請求更新名稱字段。我需要在這個格式後的一些數據: -發佈數據格式不同,那麼我需要

{"api_token"=>"api", "device_token"=>"device", "user"=>{"name"=>"mohit"}, "id"=>"4"} 

但是,當我試圖發佈此格式的東西在郵寄: -

{"user"=>"(\n  {\n  name = ChangeName;\n }\n)", "api_token"=>"api", "device_token"=>"device", "id"=>"4"} 

我無法弄清楚如何改變我的代碼生成正確的請求。這是我正在使用的代碼。

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://localhost:3000/users/4?api_token=api&device_token=device"]]; 
NSMutableDictionary *dict= [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Mike",@"name", nil]; 
NSArray *array=[[NSArray alloc]initWithObjects:dict, nil]; 
     [request setPostValue:array forKey:@"user"]; 
     [request setRequestMethod:@"PUT"]; 
     [request setDelegate:self]; 
     [request setDidFinishSelector:@selector(requestFinished:)]; 
     [request startAsynchronous]; 

請讓我知道,如果我需要發佈一些更多的代碼片段。

回答

1

ASIFormDatRequest setPostValue:forKey:想要字符串,而不是結構。它最終會調用description來將它們轉換爲字符串,並且您將獲得可打印的帶有字典的數組的說明。

Rails使用命名機制,允許您使用在http://guides.rubyonrails.org/form_helpers.html處詳述的字段命名約定來模擬平面空間中的層次結構。您應該閱讀並理解由表單助手生成的html。

嘗試:

[request setPostValue:@"mohit" forKey:@"user[name]"]; 

和鐵軌將其解壓縮到服務器上的適當類型的集合。

+0

是的確實,我得到了一個帶有字典的數組的可打印格式。我試圖直接從終端打,當我看到控制檯服務器讀取它爲「用戶」=> {「name」=>「mohit」}但當我試圖發送相同的使用ASIHttpRequest它顯示{「用戶「=>」(\ n {\ n名稱= ChangeName; \ n} \ n)「。現在你可以不用擔心了,我只需要將{「user」=>「(\ n {\ n name = ChangeName; \ n} \ n)」轉換爲「user」=> {「name」=>「mohit」 }。任何幫助? – Rahul

+0

對於我的應用程序,「user」=> {「name」=>「mohit」} <-----這個表單給出了正確的響應成功。 – Rahul

+0

我不明白你的服務器實際需要什麼。 HTTP只允許鍵值對的平坦列表,而不是層級。 ASIFormDataRequest將採用一個字典{「foo」=>「fa」; 「bar」=「ba」}並將其轉換爲HTTP查詢字符串?foo = fa&bar = ba。獲取層級到查詢字符串的唯一方法是通過發送JSON作爲值 – 2011-08-30 18:41:47

相關問題