如何在 NSDictionary 中 POST NSDictionaries 的 NSArray 而不会出现问题?

2023-12-13

我确实知道如何做到这一点,这相当简单。

问题是它不起作用。

这是我用来发布数据的函数:

- (void)updateWebsitesUsingParameters:(NSDictionary *)parameters;
{
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    [manager POST:@"http://notreal/updateWebsites.php"
       parameters:parameters
          success:^(AFHTTPRequestOperation *operation, id responseObject) {

              NSLog(@"JSON: %@", responseObject);

              //...
          }
          failure:^(AFHTTPRequestOperation *operation, NSError *error) {

              //...
          }];
}

以下是参数:

NSDictionary *parameters = @{@"type" : @"0",
                             @"credentials" : @{@"email" : @"[email protected]", @"password" : @"notreal"},
                             @"device" : @{@"ID" : @"8588107756600540", @"numberOfSessions" : @"0", @"name" : @"Nick's iMac"},
                             @"websites" : @[@{@"title" : @"Google", @"URL" : @"http://www.google.com"}, @{@"title" : @"Yahoo", @"URL" : @"http://www.yahoo.com"}]};

以下是 MySQL 字段中保存的内容:

[{URL = "http://www.google.com";},{title = Google;},{URL = "http://www.yahoo.com";},{title = Yahoo;}]

这太疯狂了!

  1. 我已经成功保存了 MySQL 字段内字典中具有多个属性的字典数组的 JSON --或者简而言之我想在这里做什么-- 将 PHP 脚本用于不同的目的并且它可以工作,没有问题。
  2. 我使用相同的 PHP 代码将其保存到 MySQL 字段,所以这不是 PHP 的错误。
  3. 我使用 AFNetworking 制作的所有其他保存/检索功能都完美运行。

这有效:

@[@{@"title" : @"Google"}, @{@"title" : @"Yahoo"}]

这不会:

@[@{@"title" : @"Google", @"URL" : @"http://www.google.com"}, @{@"title" : @"Yahoo", @"URL" : @"http://www.yahoo.com"}]

这是回应:

{
    websites =     (
                {
            URL = "http://www.google.com";
        },
                {
            title = Google;
        },
                {
            URL = "http://www.yahoo.com";
        },
                {
            title = Yahoo;
        }
    );
}

INSANE!

由于某种原因,如果我添加额外的属性,它就会崩溃。

这一定是一个AF网络bug,因为它没有意义。

EDIT:

I could:

  1. 创建两个 MySQL 字段:websiteTitles、websiteURLs。

  2. 将其保存为一个字符串:“Google;http://www.google.com”然后将其分开,但这违背了使用 JSON 的目的。

  3. 发送切成两半的参数:websteTitles、websiteURLs

一切都很可怕,有什么想法吗?

EDIT 2:

我运行了一些测试:

无论数组有 1 个还是 2 个项目,它的行为仍然是这样的。

我尝试了什么rob180建议,正如预期的那样,这是 AFNetwokring 的错:

{
    websites =     (
                {
            URL = "http://www.google.com";
        },
                {
            title = Google;
        },
                {
            URL = "http://www.yahoo.com";
        },
                {
            title = Yahoo;
        }
    );
}

这是从应用程序发送的实际服务器响应,中间没有 mysql。

EDIT 3:

REQUEST: <NSMutableURLRequest: 0x7f9352d467e0> { URL: http://notreal/updateWebsites.php }

The HTTPBody看起来像这样:

<63726564 656e7469 616c735b ... 653d30>

我怎样才能解码这个?

另外,我正在使用AFHTTPRequest序列化器。也许,如果我把它改成AFJSONRequestSerializer它会解决问题,但我真的不想这样做,因为我已经用这种方式编写了很多方法。


“查询字符串参数化根本不是编码嵌套数据结构的可靠方法。这就是为什么所有现代 Web 框架都具有内置便利功能,可以自动将传入的 JSON 解码为参数。” - 马特·汤普森

So, JSON这是...

参数:

NSDictionary *parameters = @{@"websites" : @[@{@"Title" : @"Google", @"URL" : @"http://www.google.com"}, @{@"Title" : @"Yahoo", @"URL" : @"http://www.yahoo.com"}]};

Send:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];

    [manager POST:@"http://server/path/file.php"
       parameters:parameters
          success:^(NSURLSessionDataTask *task, id responseObject) {

              NSLog(@"JSON: %@", responseObject);
          }
          failure:^(NSURLSessionDataTask *task, NSError *error) {

              NSLog(@"Error: %@", error.description);
          }];

取回:

<?php

header('Content-type: application/json');

$request = json_decode(file_get_contents('php://input'), TRUE);

$response = ["URLOfTheSecondWebsite" => $request['websites'][1]['URL']];

echo json_encode($response);

?>

回复:

{
    URL = "http://yahoo.com";
}

全做完了!

纯金。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 NSDictionary 中 POST NSDictionaries 的 NSArray 而不会出现问题? 的相关文章

随机推荐

  • 在浏览器中使用 PHP 脚本运行 Composer

    想知道是否可以执行composer从带有一个 PHP 包装器的浏览器 因为我无权通过 shell 访问服务器 不确定是否可以使用 cURL 来做到这一点 Danack 解决方案的替代方案是包括 composer composer 作为一个
  • apache 上的 Django 与 mod_wsgi (Linux) - 403 禁止

    好的 所以我正在关注this教程 当我尝试通过本地服务器访问我的网站时 我收到这个奇怪的错误 Forbidden You don t have permission to access on this server Apache 2 4 6
  • 如何使用java从SVN存储库获取所有文件和目录

    我有一个任务要完成 我想连接到 SVN 存储库 并且必须使用 java 代码将所有目录和文件从 svn 下载到我的本地系统 我对此很陌生 并尝试使用示例来读取单个文件内容http svnkit com kb dev guide commit
  • 创建一个变量来保存不同类型的对象 C++

    我有 3 个不同的对象A B and C 根据给定的参数 我想在这些不同的对象中进行选择 在编程中 class A public void printHello cout lt lt HELLO A lt lt endl class B p
  • 如何在postgres COPY批量插入期间增加主键?

    我有一张桌子serialid 约束 id serial NOT NULL CONSTRAINT pricing cache pkey PRIMARY KEY id 现在我想使用postgresCOPY命令批量插入csv数据到表中 COPY
  • MVVM / ObservableCollection 问题

    我有以下 XAML
  • 我想了解ReactJS中的SetState和Prevstate

    我是 ReactJS 的新手 我在项目中使用向导形式 使用户能够执行下一步和上一步 我复制了下一个按钮的一些代码 但老实说不明白它的含义 你能帮我理解下面的代码吗 next this setState prevState gt curren
  • 使用PHP备份MySql数据库

    我在 MySql 中有一个相当大的数据库 我需要每天左右对其进行备份 我需要能够从任何计算机上进行备份 因此我考虑制作一个 php 脚本来执行此操作并将此 php 脚本放在网上 当然具有密码保护和授权等 以便只有我可以访问它 但我想知道 这
  • PHP 中的日期比较

    我目前有一个日期作为 255 个字符的 VARCHAR 存储在我的 SQL 数据库中 我将此字符串声明为 within an object date date DATE RFC822 现在 在稍后的编码中 我意识到我需要实际比较日期 我最初
  • gradle 同步时遇到问题 - 找不到 lint-gradle-api.jar (com.android.tools.lint:lint-gradle-api:26.1.2)

    我已将 Android Studio 更新到 3 2 1 现在因以下问题而停止 找不到 lint gradle api jar com android tools lint lint gradle api 26 1 2 在以下位置进行了搜索
  • Django 内容类型表 - 身份验证权限

    我想在下面添加一个权限auth permission桌子 当我手动插入另一个权限时 我需要插入一个content type id还 这是参考content type桌子 我不知道它有什么作用 如果用户没有该权限 我想删除一组 HTML 行
  • 在Python中使用“十进制”

    有人可以解释一下下面发生了什么吗 我使用Python 3 3 1 gt gt gt Decimal 0 1 Decimal 0 1 Decimal 0 1 Decimal 0 3 Decimal 0 0 2 gt gt gt Decimal
  • let 关键字和闭包?

    我正在学习ES6的新特性 我有一个关于 let 的问题 它涉及这段代码 for let i 0 i lt 45 i var div document createElement div div onclick function alert
  • 单元测试 反模式目录

    Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 反模式 必须至少存在两个关键元素才能正式区分实际的反模式与简单的坏习惯 坏实践或坏主意 一些重复的行动 过程或结构模式 最初看起来
  • Android Oreo:保持已启动的后台服务处于活动状态而不将其设置为前台(但有通知)?

    我正在开发一个媒体应用程序 我想知道如何保留我的应用程序在 Oreo 之前的一些旧行为 例如 即使服务不再设置为前台 也可以让通知和服务 用于播放 挂在那里 当播放开始时 我们调用 startService MediaPlaybackSer
  • c# 比较两个文本文件并生成一个有差异的新文件

    我正在寻找快速比较 2 个文本文件 15000 行 并获取两个文件中不同的输出字符串的最佳方法 第一个是旧库存 新库存是当前库存 我想生成第三个 其中包含 file2 和 file1 之间不同的字符串 这 2 个文件中 95 是相似的 非常
  • 注册。 delphi中Android应用程序的大小

    当我通过 Delphi Xe7 生成 Android 应用程序时 App Name Apk 文件为 6 MB 当我在移动设备中安装时 应用程序大小为 25 MB 请向我提供是否有任何其他设置可以减小应用程序大小的信息 在代码中我只有单一形式
  • 将 rxGlm 转换为 GLM 时出错

    我在将 rxGlm 模型转换为普通 glm 模型时遇到问题 每次我尝试隐藏我的模型时 都会遇到相同的错误 Error in qr lm object lm object does not have a proper qr component
  • 数据网格视图标题网格颜色

    这是一个 VB NET 应用程序 我们在数据网格视图中显示 SQL 语句的输出 我正在使用 NET 2005 我们需要使网格控件上的标题分隔符的颜色与窗体上的 GridColor 的颜色相同 我们尝试查看 DataGridView 控件的所
  • 如何在 NSDictionary 中 POST NSDictionaries 的 NSArray 而不会出现问题?

    我确实知道如何做到这一点 这相当简单 问题是它不起作用 这是我用来发布数据的函数 void updateWebsitesUsingParameters NSDictionary parameters AFHTTPRequestOperati