1

我想用 POST 方法发出请求,然后我希望他们返回 json 数据或NSDictionary,但他们只能在成功时返回字符串

NSString *response = [operation responseString];

任何人都知道如何让他们返回NSdictionary而不是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];
4

2 回答 2

1

我试图发送 JSON 对象并取回 JSON 数据并解析它

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];

可能有帮助

于 2013-09-26T06:45:02.547 回答
0

这是我使用的,请随意满足您的需求:

-(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];
    };

编辑:哦,使用

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

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

方法将该字典中的所有属性获取到自定义类中。

于 2013-02-27T07:57:07.900 回答