0

私は多くのことを試しましたが、どうにかして ios での HTTP POST リクエストの基本を把握できませんでした。サーバー エラーが発生することもあれば、ステータス コード 200 が返されても空の応答が返されることもあります。バックエンド サーバー コードが機能し、応答として json データを送信しています。どういうわけか、私の iOS アプリはその応答を取得できません。どんな助けでも大歓迎です!

これは私が試したものの1つです!GetAuthorOfBook は、strBookName を POST 引数として受け取り、作成者の名前を json オブジェクトとして返す PHP サーバー関数に対応しています。

NSURL *url = [NSURL URLWithString:@"http://mysite.com/getAuthorOfBook"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSString *post = [NSString stringWithFormat:@"strBookName=Rework"];
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];


[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
[request setValue:@"text/html" forHTTPHeaderField:@"Content-Type"];

[request setHTTPBody:postData ];

 //get response
 NSHTTPURLResponse* urlResponse = nil;  
 NSError *error = [[NSError alloc] init];

 NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

responseData には、作成者の名前 (strAuthorName) が json の "key":"value" ペアとして含まれている必要があります。

4

1 に答える 1

1

responseData はまだ json オブジェクトではありません。最初にシリアル化して NSDictionary に割り当てる必要があります。その後、キーで解析できます。

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

これで、次のいずれかの方法で authorName にアクセスできるはずです (json 内の単なる文字列の場合)。

NSString *authorName = [json objectForKey:@"strAuthorName"];

または、オブジェクトの辞書 (json 内のオブジェクトの配列) の場合は、このようにします。

NSDictionary *authorName = [json objectForKey:@"strAuthorName"];
于 2012-09-10T12:24:26.920 に答える