2013-07-16 75 views
1

您好,我需要發送一個陣列中Afnetworking查詢字符串如何在Afnetwoking post方法中將數組作爲參數發送?

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://192.008.0.28/aaa/a/"]]; 

    NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: @"20", @"Miles", [NSArray arrayWithObjects:@"1",@"2",@"3",nil], @"Interval", nil]; 

    [httpClient postPath:iUpdateNotificationMethod parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSString *responseStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; 
     NSLog(@"Request Successful, response '%@'", responseStr); 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"[HTTPClient Error]: %@", error.localizedDescription); 
    }]; 

但是服務器端,我們得到了「萬里行」的參數的一個:20,「間隔」:空如何解決它 謝謝,

+0

這是你想要的? http://stackoverflow.com/questions/11088025/afnetworking-how-to-specify-multiple-values-for-one-key – Luke

回答

0

由於您正在提交一個數組,因此AFNetworking會生成一個不同的參數名稱並用您提供的值重載它。例如,你的請求生成以下查詢字符串:

Interval[]=1&Interval[]=2&Interval[]=3&Miles=20 

這在AFHTTPClient.m定義在AFQueryStringPairsFromKeyAndValue功能。

如果您想保留原始參數,您應該自行決定如何將NSArray轉換爲NSString。例如,您可以執行諸如[myArray componentsJoinedByString:@","]之類的操作,然後將其拆分回服務器上的元素。如果您選擇此方法,請注意使用可能出現在實際數據中的字符。

+0

我看到一個類似的數組編碼。你能解釋一下如何解決這個問題嗎? Thx – bluefloyd8

+0

這是一個設計問題。如果您將數組作爲HTTP參數傳遞,AFNetworking將需要將其轉換爲HTTP查詢字符串。你可以想出各種方法來做到這一點(比如用','連接輸入)。選擇的方法不同 - 將參數標記爲數組,前綴爲[]'。因此,你需要改變你的服務器端來處理這個事情,或者傳遞一個''NSString'',這個'NSString'是從客戶端連接的原始數組中創建的。 – StatusReport

-1

我相信這會起作用: params = @ {@「Miles」:@「20」,@「Interval」:@ [@「1」,@「2」,@「3」]};

+0

這將產生確切的'NSDictionary',因爲它是之前創建的。 – StatusReport

+0

對不起 - 你是對的。我以爲他在使用AFJSONRequestOperation。但在這種情況下,兩者都可以起作用。 – KHansenSF

2

嘗試這個

AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:OAuthBaseURL]; 

NSMutableDictionary *parameters = [[NSMutableDictionary alloc] initWithCapacity:0]; 
    for (int i =0; i < [userIDs count]; i++) { 
     NSString *userID = [[userIDs objectAtIndex:i] objectForKey:@"id"]; 
     NSDictionary *tmpDict = [NSDictionary dictionaryWithObjectsAndKeys:userID , [NSString stringWithFormat:@"ids[%i]",i], nil]; 
     [parameters addEntriesFromDictionary:tmpDict]; 
    } 
    [client postPath:@"/user" 
      parameters:parameters 
      success:^(AFHTTPRequestOperation *operation, id responseObject) { 
       NSData *data = (NSData *)responseObject; 
       NSString *jsonStr = [[NSString alloc] initWithData:data 
                  encoding:NSUTF8StringEncoding]; 
       NSLog(@"jsonStr %@",jsonStr); 

      } 
      failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
       [self showError]; 
      } 
    ]; 
相關問題