38

サーバーにデータを送信し、JSON形式で応答を受信しようとしています。問題は、サーバーが「成功」または「失敗」を返す必要があるが、「(null)」を返すことです。

返されたエラーは次のとおりです。

Error Domain = NSCocoaErrorDomain Code = 3840 "操作を完了できませんでした。(Cocoaエラー3840)"(JSONテキストが配列またはオブジェクトで開始されておらず、フラグメントを設定できないようにするオプションがあります。)UserInfo = XXXXXXXXX {NSDebugDescription = JSON text配列またはオブジェクトで開始せず、フラグメントを設定できないようにするオプション。}

サーバースクリプトにエラーがある可能性はありますか?

データを送信して応答を受信する私の関数は次のとおりです。

- (void) putData:(NSString *)parameter valor:(NSString *)valor {

    NSString *rawString = [NSString stringWithFormat:@"%@=%@", parameter, valor];
    NSData *data = [rawString dataUsingEncoding:NSUTF8StringEncoding];
    NSURL *url = [NSURL URLWithString:@"http://www.xxx.xxx/xxx.php"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"PUT"];
    [request setHTTPBody:data];
    NSURLResponse *response;
    NSError *error;
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
    NSLog(@"responseData: %@ error: %@", json, error);
}
4

3 に答える 3

34

サーバーからの応答にオプションを渡さない限りNSJSONReadingAllowFragments[NSJSONSerialization JSONObjectWithData:options:error:]配列またはディクショナリであるトップレベルのコンテナーを持つ有効なJSONである必要があります。

例えば:

    { "response" : "Success" }

PS変更可能な辞書が必要な場合はNSJSONReadingMutableContainers、オプションにも含める必要があります。

于 2013-01-05T11:32:25.530 に答える
10

サーバーからの応答に有効なJSONが含まれていない可能性があります。

技術的には、JSONオブジェクトは「配列」または「オブジェクト(ディクショナリ)」で始まる必要があります。

したがって、サーバーが返すものは何でもありません。

また、NSJSONReadingAllowFragmentsオプションを使用すると、JSONを強制的に使用することができます。

を使用して、

AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
于 2015-05-13T09:17:09.000 に答える
1

iOSデバイスでVPNに接続している場合、この問題が発生する可能性があります。

于 2014-07-15T12:20:57.577 に答える