2011-11-04 94 views
5

試圖將嵌套參數的信息發佈到rails應用程序並遇到一些麻煩。使用ASIHTTPRequest使用NSDictionary對嵌套參數進行POST POST

#pragma mark - Begin Network Operations 
- (void)beginNetworkOperation { 
    NSURL *requestURL = [NSURL URLWithString:[self retrieveURL]]; 
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:requestURL]; 

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 
    [request setShouldContinueWhenAppEntersBackground:YES]; 
#endif 

    [request setRequestMethod:@"PUT"]; 

    [request addRequestHeader:@"Content-Type" value:@"application/json"]; 

    [request addPostValue:strClientId forKey:@"client_id"]; 
    [request addPostValue:strAccessToken forKey:@"access_token"]; 

    NSDictionary *assetDictionary = [NSDictionary dictionaryWithObject:self.tags forKey:@"tags"]; 
    [request addPostValue:assetDictionary forKey:@"asset"]; 

    [request setDelegate:self]; 
    [request setDidFinishSelector:@selector(requestFinished:)]; 
    [request setDidFailSelector:@selector(requestFailed:)]; 
    [request startSynchronous]; 
} 

self.tags僅僅是一個逗號分隔值的NSString,但一旦到達軌道服務器標籤參數不能被讀取(PARAMS [:資產] [:標籤])。

回答

2

嘗試將字典作爲JSON字符串傳遞而不是字典對象。

你可以做到這一點使用的iOS5 JSON庫,或者這一次更多的兼容性:

https://github.com/stig/json-framework

我要做的就是用appendPostData因爲我敢肯定,設置標題(addRequestHeader),並使用addPostValue不兼容的功能。 這裏是我的代碼示例:

ASIFormDataRequest *request; 
[request addRequestHeader:@"Content-Type" value:@"application/json"]; 
[request appendPostData:[[SBJsonWriter new] dataWithObject:myDictionaryToPassAsAnArgument]]; 

當您使用appendPostData,你不能使用任何addPostValue。你必須把所有東西都放在字典裏。

+0

我已經嘗試過了[請求addPostValue:[assetDictionary JSONRepresentation] forKey:@「asset」];我得到了同樣的錯誤在軌道服務器「TypeError(無法將符號轉換爲整數)」,這似乎毫無意義...... – Kyle

+0

也許這是因爲你的字符串中的昏迷,因爲昏迷JSON的分隔符。 嘗試用別的東西代替你的刺中的昏迷,看看它是否工作 - stringByReplacingOccurrencesOfString:withString: – MatLecu

+0

我的測試數據還沒有包含任何逗號。 – Kyle

2

以下是iOS上使用JSONKit的工作代碼片段。

[request addRequestHeader:@"Content-Type" value:@"application/json"]; 

NSMutableDictionary *requestDict = [[NSMutableDictionary alloc] init]; 
[requestDict setObject:@"iSteve" forKey:@"UserId"]; 
[requestDict setObject:@"1" forKey:@"CompanyCode"]; 
[requestDict setObject:@"IN" forKey:@"LineOfBusiness"]; 
[requestDict setObject:@"M" forKey:@"LineOfBusinessClassification"]; 
[requestDict setObject:pricingVariablesListString forKey:@"CarQuoteString"]; 
[request appendPostData:[requestDict JSONData]]; 
+0

在jQuery中.appendPostData在IE中不起作用。我使用IE 10有沒有解決這個問題的方法? JavaScript運行時錯誤:對象不支持屬性或方法'appendPostData' – JaiSankarN