サーバーにデータを送信し、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);
}
オプションNSJSONReadingAllowFragments
を[NSJSONSerialization JSONObjectWithData:options:error:]
に渡さない限り、サーバーからの応答は、配列またはディクショナリーである最上位のコンテナーを持つ有効なJSONでなければなりません。
例えば:
{ "response" : "Success" }
追伸可変辞書が必要な場合は、オプションにNSJSONReadingMutableContainers
も含める必要があります。
サーバーからの応答に有効なJSONが含まれていない可能性があります。
技術的には、JSONオブジェクトは「配列」または「オブジェクト(辞書)」で始まる必要があります。
したがって、サーバーが返すものは何でもありません。
また、NSJSONReadingAllowFragmentsオプションを使用して、JSONを強制的に消費させることができます。
を使用して、
AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
IOSデバイスでVPNに接続している場合、この問題が発生する可能性があります。