0

以前に行ったプロジェクトのコードを、完全に機能する場所に貸し出しています。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を返します。

4

1 に答える 1

0
NSString *Sc= @"200";
 NSString *dataD=@"getWhatsOn";
 NSMutableDictionary *dictionnary = [NSMutableDictionary dictionary];
 [dictionnary setObject:Sc forKey:@"firstString"];
 [dictionnary setObject:dataD forKey:@"secondfield"];

 NSError *error = nil;
 NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionnary
 options:kNilOptions
 error:&error];   

 NSString *urlString = @"your URL";
 NSURL *url = [NSURL URLWithString:urlString];

 // Prepare the request
 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
 [request setHTTPMethod:@"POST"];
 [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
 [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
 [request setValue:@"json" forHTTPHeaderField:@"Data-Type"];
 [request setValue:[NSString stringWithFormat:@"%d", [jsonData length]]  forHTTPHeaderField:@"Content-Length"];
 [request setHTTPBody:jsonData];    

 NSError *errorReturned = nil;
 NSURLResponse *theResponse =[[NSURLResponse alloc]init];
 NSData *data = [NSURLConnection sendSynchronousRequest:request
 returningResponse:&theResponse
 error:&errorReturned];
 if (errorReturned) 
 {
 //...handle the error
 }
 else 
 {
 NSString *retVal = [[NSString alloc] initWithData:data
 encoding:NSUTF8StringEncoding];
 NSLog(@"%@", retVal);

 }
于 2012-11-16T12:52:41.500 に答える