6

ローカル サーバーで (MAMP を使用して) api.php を呼び出そうとしています。サーバー側の api.php が呼び出されていますが、php コード内の _POST の内容に次のエラーが含まれています。

Error Domain = NSCocoaErrorDomain Code = 3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo = 0x15d7bdd0 {NSDebugDescription = JSON text did not start with array or object and option to allow fragments not set.}

JSON POST リクエストを api.php に送信しようとしている私のアプリは、AFNetworking 2 を使用する iOS アプリです。

これは私のリクエストコードです:

- (void)postUpdateRequest
{
    if (!dataModel)
        dataModel = [[DataModel alloc] init];

    NSDictionary *params = @{@"foo": @"bar2"};

    NSLog(@"%@",params);

/*    NSDictionary *params = @{@"cmd":@"update",
                             @"user_id":[dataModel userId],
                             @"token":[dataModel deviceToken]
                             };//@"ip_address":[dataModel getIPAddress]};*/

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//    manager.requestSerializer = [AFJSONRequestSerializer serializer];

    [manager POST:ServerApiURL parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"JSON: %@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];
}

インターネット全体を見ましたが、特定の問題に対する答えが見つかりません。何をしても同じエラーが返されます。

JSON が適切にフォーマットされていないのはなぜですか? また、実際に送信している JSON を盗聴する方法が見つからないようです。

ありがとうございました。

4

3 に答える 3

5

例のように API を使用すると、HTTP メッセージは Content-Type を使用して作成されますapplication/x-www-form-urlencoded。内部的に、param辞書は AFN によってエンコードされ (ただし、w3c で指定されているように厳密には正しくありません)、リクエスト本文として設定されます。

ヘッダーを指定しなかったためAccept、サーバーは可能な応答データ (存在する場合) のコンテンツ タイプを自由に選択できます。

応答を受信したら、HTTP ステータス コードと応答本文のコンテンツ タイプ (存在する場合)を常に確認する必要があります。

サーバーが何らかの問題を示すステータス コードと、予想とは異なる種類のコンテンツ タイプで「エラー応答」を含む応答本文を返した可能性があります (たとえば、text/html が返されました)。

于 2013-11-09T10:53:20.313 に答える
2

実際の要求と応答を追跡するために、シミュレーターまたは共有 wifi 経由で whireshark を実行している mac に接続されたデバイスでアプリを実行しているときに、wireshark ( http://www.wireshark.org/ ) のようなものを使用できます。

于 2013-11-09T10:59:03.027 に答える