2011-11-04 47 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