Zoro
Zoro

Reputation: 51

AFNetworking POST cannot return json data

I want to make a request with POST method and after that I want them to return the json data or NSDictionary, but they can only return the string when it succeed

Like NSString *response = [operation responseString];

Anyone know how to make them return NSdictionary instead of NSString?

-(IBAction)SubmitLogin:(id)sender{
    NSLog(@"Login");
   // NSLog(@"%@",username);

    //START FUNGSI UNTUK POST, PUT, DELETE

    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:signinUrl];
    [httpClient defaultValueForHeader:@"Accept"];



    NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                            @"someuser", @"username",
                            @"somepassword",@"password",
                            nil];

    NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST"
                                                            path:@""
                                                      parameters:params];

 AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    [httpClient registerHTTPOperationClass:[AFHTTPRequestOperation class]];

    [operation setCompletionBlockWithSuccess:
     ^(AFHTTPRequestOperation *operation,
       id responseObject) {
         NSString *response = [operation responseString];
         NSLog(@"response: %@",response);
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         NSLog(@"error: %@", [operation error]);
     }];


    //call start on your request operation
    [operation start];

Upvotes: 1

Views: 1416

Answers (2)

user2063513
user2063513

Reputation:

I was trying to send JSON object and getting back JSON data and parse it

NSURL *url = [NSURL URLWithString:@"https://MySite.com/"];
AFHTTPClient *httpClient = [[AFHTTPClient alloc]initWithBaseURL:url];
//[httpClient setParameterEncoding:AFJSONParameterEncoding];
//[httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]];

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                        @"Ans", @"name",
                        @"29",  @"age", nil];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST"
                                                        path:@"/testJSONReturn.php"
                                                  parameters:params];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
    NSLog(@"DATA: %@", [JSON valueForKeyPath:@"data"]);
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
    NSLog(@"Request Failure Because %@",[error userInfo]);
}];

[operation start];

Might help

Upvotes: 1

blaa
blaa

Reputation: 438

This is what I use, feel free to fit it to your needs:

-(void) loginWithUserID:(NSString*)usrID User:(NSString*)usr Password:(NSString *)psw Sender:(id)sender
{
    if ([sender respondsToSelector:@selector(startLoading)]){
        [sender performSelector:@selector(startLoading)];
    }

    baseURL = [NSString stringWithFormat:
                  @"http://xxx.xxx.xxx.xxx/test/service.svc/weblogin"];
    NSString* serviceURL = [NSString stringWithFormat:
                           @"%@?userID=%@&user=%@&password=%@",baseURL,usrID,usr,psw;

    NSURL *url = [NSURL URLWithString:[serviceURL stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        self.LoginOK = [JSON valueForKeyPath:@"LoginOK"];
        if (LoginOK.intValue == 1) {
            NSDictionary *usrData = [JSON valueForKeyPath:@"userData"];
            userData = [[UserData alloc]init];
            [userData readFromJSONDictionary:usrData];
            NSLog(@"Userdata: %@",userData);
            if ([sender respondsToSelector:@selector(loginSuccessful:)])
            {
                [sender performSelector:@selector(loginSuccessful:)];
            }
        }else{
            UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Error" message:@"No Correct Login Credentials" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
            [alertView show];
            ;}

    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
        if ([sender respondsToSelector:@selector(stopLoading)]){
            [sender performSelector:@selector(stopLoading)];
        }
        [[[UIAlertView alloc] initWithTitle:@"Error"
                                    message:@"Loginservice not available! Check your connection!"
                                   delegate:nil
                          cancelButtonTitle:@"OK"
                          otherButtonTitles: nil] show];
        NSLog(@"Error: %@", error);

    }];

    [operation start];
    };

EDIT: Oh and use a

-(void)readFromJSONDictionary:(NSDictionary *)d
{

    [self setProperty1:[d objectForKey:@"property1"]];
}

method to get all the properties out of that dictionary into a custom class.

Upvotes: 0

Related Questions