以前に行ったプロジェクトのコードを、完全に機能する場所に貸し出しています。jQueryを使用してデータを出力するページを個別にテストしましたが、正常に動作するため、xcode内の問題であることがわかります。
正しいリターンデータを取得するために使用される投稿データを含むNSDictionaryを取得する次のコードを使用しています。
-(NSDictionary *)loadData:(NSDictionary *) sendDict{
SBJsonWriter *writer = [SBJsonWriter new];
NSString * jsonData = [writer stringWithObject:sendDict];
NSString * getString = [NSString stringWithFormat:@"json=%@", jsonData];
NSData *requestData = [NSData dataWithBytes: [getString UTF8String] length: [getString length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: @"http://divisi.co.uk/YTA/custom_api.php"]];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: requestData];
NSData *returnData = [ NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil ];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding];
NSLog(@"Returned Json: %@", returnString);
// decoding the json
NSDictionary *loginArray = [NSDictionary alloc];
loginArray = [returnString JSONValue];
if([[loginArray objectForKey:@"SC"] isEqualToString:@"200"]){
return [loginArray objectForKey:@"data"];
}
else{
return [loginArray objectForKey:@"error_message"];
}
}
投稿リクエストを送信すると、php側でnullが検出され、これが投稿用にエンコードするjsonは{"method":"getWhatsOn"}
非常に単純です。私のテストPHPページは、このメソッド名を取得して、正しくエンコードされて出力します{"SC":"200","data":"getWhatsOn"}
。これは、前述のようにjQueryを使用するブラウザーで機能しますが、phpでは、リクエストがiPhoneから送信されると、$ _POST['method']はnullを返します。