带有嵌套字典的HTTP请求

时间:2012-12-15 11:09:51

标签: iphone ios web-services asihttprequest asiformdatarequest

我需要使用POST方法访问Web服务,使用嵌套字典来接收相关数据。但我一直得到空洞的回应。我究竟做错了什么?

    NSURL *url = [NSURL URLWithString:@"http://appzander.com/gateway.php"];

    ASIFormDataRequest *_request = [ASIFormDataRequest requestWithURL:url];

    __weak ASIFormDataRequest *request = _request;


    AppDelegate *app = [[UIApplication sharedApplication] delegate];
    NSDictionary *paramsDic = [[NSDictionary alloc] initWithObjectsAndKeys:
                             [NSNumber numberWithDouble:app.myLocation.longitude],@"longitude",
                             [NSNumber numberWithDouble:app.myLocation.latitude],@"latitude",
                             @"500000",@"radius",
                             @"1000",@"maxResults",
                             nil];
    NSDictionary *requestDic = [[NSDictionary alloc] initWithObjectsAndKeys:
                                @"GetNearestStations",@"function",
                                @"false",@"debug",
                                paramsDic,@"params",
                                nil];

    [request addRequestHeader:@"Content-Type" value:@"application/json"];
    [request appendPostData:[[SBJsonWriter new] dataWithObject:requestDic]];
    request.requestMethod = @"POST";    
    [request setDelegate:self];
    [request setCompletionBlock:^{         
        NSData *responseString = [request responseData];// responseString];
        NSLog(@"Response: %@", responseString);
        [self plotCrimePositions:responseString];
    }];
    [request setFailedBlock:^{
        NSError *error = [request error];
        NSLog(@"Error: %@", error.localizedDescription);
    }];

    // 6
    [request startAsynchronous];

2 个答案:

答案 0 :(得分:0)

使用 ASIFormDataRequest

     NSURL *url = [NSURL URLWithString:@"yourUrlhere"];   

    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

    [request setRequestMethod:@"POST"];

    [request setPostValue:email forKey:@"username"];

    [request setPostValue:pasw forKey:@"pass"];

    [request setDelegate:self];

    [request startAsynchronous];

答案 1 :(得分:0)

解决了 - 我没有正确发送参数:

 NSURL *url = [NSURL URLWithString:@"http://appzander.com/gateway.php"];

    ASIFormDataRequest *_request = [ASIFormDataRequest requestWithURL:url];

    __weak ASIFormDataRequest *request = _request;


    AppDelegate *app = (AppDelegate*)[[UIApplication sharedApplication] delegate];

    NSDictionary *paramsDic = [[NSDictionary alloc] initWithObjectsAndKeys:
                               [NSNumber numberWithDouble:32.071738],@"longitude",
                               [NSNumber numberWithDouble:34.791295],@"langitude",
                               @"500000",@"radius",
                               @"1000",@"maxResults",
                               nil];

    [request setPostValue:@"false" forKey:@"debug"];
    [request setPostValue:@"GetNearestStations" forKey:@"function"];
    SBJsonWriter *jsonWriter = [[SBJsonWriter alloc] init];

    NSString *paramsDicJSON = [jsonWriter stringWithObject:paramsDic];
   [request setPostValue:paramsDicJSON forKey:@"params"];
    request.requestMethod = @"POST";
    [request setDelegate:self];
    [request setCompletionBlock:^{
        NSString *responseString = [request responseString];
        [self plotBikes:responseString];
    }];
    [request setFailedBlock:^{
        NSError *error = [request error];
        NSLog(@"Error: %@", error.localizedDescription);
    }];
    [request startAsynchronous];