无法使用 AFNetworking 发布带有数组的字典

Posted

技术标签:

【中文标题】无法使用 AFNetworking 发布带有数组的字典【英文标题】:Can't post dictionary with array with AFNetworking 【发布时间】:2014-12-16 15:42:51 【问题描述】:

显然,服务器无法理解我的数组字典。 这是我写的

NSURL *url = [NSURL URLWithString:@"http://"];
self.manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url];

self.manager.requestSerializer = [AFJSONRequestSerializer serializer];

AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
[self.manager setResponseSerializer:responseSerializer];
self.manager.responseSerializer.acceptableContentTypes = [self.manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];

NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:
                            [SOUser sharedManager].id, @"id",
                            @"vk", @"socialId",
                            [SOUser sharedManager].firstName, @"firstName",
                            [SOUser sharedManager].lastName, @"lastName",
                            [SOUser sharedManager].sex, @"gender",
                            [SOUser sharedManager].friends, @"friends", nil];

[self.manager POST:@"api/user/"
   parameters:parameters
      success:^(AFHTTPRequestOperation *operation, id responseObject) 
          //NSLog(@"Response: %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);
          NSLog(@"OPERATION = %@", operation);
          NSLog(@"%@", operation.responseString);
          NSLog(@"JSON: %@", responseObject);
          NSLog(@"Token = %@", [responseObject objectForKey:@"token"]);
          [SOUser sharedManager].legendaryToken = [responseObject objectForKey:@"token"];
       failure:^(AFHTTPRequestOperation *operation, NSError *error) 
          NSLog(@"Error: %@", error);
          NSLog(@"message: %@", [operation.responseObject objectForKey:@"message"]);
          NSLog(@"operation: %@", [operation.responseObject objectForKey:@"errors"]);
          NSDictionary *ac = [operation.responseObject objectForKey:@"errors"];
          NSLog(@"%@", [ac objectForKey:@"email"]);
          NSString *fg = [ac objectForKey:@"email"];
          NSLog(@"%@", fg);
      ];

[SOUser sharedManager].friendsNSMutableArray

for (int i = 0; i < 25; i++) 
    [self.friends addObject:[NSString stringWithFormat:@"%i", i]];

在服务器上,我收到了所有数据,但不是我的数组,而是我的数字服务器打印字符串“数组”?它可以是什么?

我的 JSON:

JSON: 
    email = "<null>";
    "fb_friends" = "<null>";
    "fb_id" = "<null>";
    firstName = Sergey;
    gender = 2;
    id = 17;
    lastName = Oleynich;
    phone = "<null>";
    token = 6990b71a61411d9d038dad1e2a54dd9f;
    "vk_friends" =     (
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24
    );
    "vk_id" = 3;

服务器

JSON : Id:17
vk_id:3
fb_id:NULL
firstName:Sergey
lastName:Oleynich
gender:2
email:NULL
vk_friends:Array

【问题讨论】:

1.它是语义,但您描述为“JSON”的并不是真正的 JSON。这是您在 NSLog 将创建 JSON 的对象时得到的。 2. 您向我们展示了服务器收到的内容,但您现在没有向我们展示您生成了该输出。如果有的话,vk_friendsArray 的事实令人鼓舞。我想知道问题是否在于您如何在服务器上检查/显示请求,而不是请求本身的问题。向我们展示您是如何生成最终“服务器”输出的。 @Rob 向我们展示您是如何生成最终“服务器”输出的。我不明白我应该展示什么?你的意思是我发送给服务器的到底是什么?我该如何展示它? 不,我的问题是您如何在原始问题的末尾输出最后一个输出块。如果我理解正确,您会问“为什么我的 'vk_friends' 键会看到 'Array'?”好吧,我们必须看看您是如何生成该输出的。您最初的问题意味着您认为问题出在原始请求中,我建议该请求可能没问题,但这可能只是您如何输出vk_friends 的问题,直到我无法回答您向我们展示了您是如何创建最终“服务器”输出的。 【参考方案1】:

我建议您的请求可能没问题,但问题可能只是您在问题末尾显示“服务器”值的方式。例如,如果您的服务器是用 php 编写的,而您的 echo 是保存 vk_friends 数组的变量,则它只会显示“Array”。

如果你想在 PHP 中显示数组,你可以这样做:

foreach ($vk_friends as $vk_friend) 
    echo $vk_friend . "\r\n";

坦率地说,如果您的服务器正在响应应用程序,那么您可能会使用json_encode,无论如何,这一点没有实际意义。但这可能是您当前在输出中看到“Array”的原因。

【讨论】:

我做客户。服务器制造了另一个人,他们说在服务器上他们只看到阵列。这就是为什么我认为我的帖子可能不正确。请你给我建议如何在我的代码中使用 NSLog 查看我的原始输出信息(以 json 格式)。 您的客户端请求在我看来没问题,但真正的测试是在 Charles 之类的工具中观察请求,并查看在模拟器上运行应用程序时发送的 JSON。我打赌你会看到那里的朋友名单。如果是这样,请与您的服务器朋友分享 JSON,看看他们怎么说。但是,如果不是,请使用该 JSON 更新您的问题。问题是 JSON 是否有效,或者您和服务器团队之间是否存在一些无辜的误解。

以上是关于无法使用 AFNetworking 发布带有数组的字典的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking + AFHTTPRequestOperation 无法保存数组

从 AFNetworking 2.0 加载带有 JSON 的 UITableView

无法使用 AFNetworking 将阵列发布到服务器

iOS,AFNetworking - 带有 JSON 响应的“清除”NSSTring [关闭]

无法在 Today Extension 上使用 AFNetworking

无法在 Today Extension 上使用 AFNetworking