2012-11-16 2 views
0

이전 프로젝트의 코드를 빌려주고 있습니다. 완벽하게 작동 한 곳에서했습니다. 내가 jQuery를 사용하여 데이터를 출력하는 페이지를 별도로 테스트 했으므로 xcode 내에서 문제가 있다는 것을 알았습니다. 나는 그것이 PHP 측이 json으로에 널 발견 한 후 요청을 보낼 때iPhone에서 SBJSON을 사용하여 PHP 페이지에 게시 할 때의 문제

-(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"]; 
    } 
} 

:

나는 올바른 반환 데이터를 가져 오는 데 사용 후 데이터를 포함하는 NSDictionary에 소요 다음 코드를 사용하고 게시 될 인코딩은 {"method":"getWhatsOn"}이며 매우 간단합니다. 내 테스트 PHP 페이지에서 방금이 메서드 이름을 가져오고 올바르게 인코딩 된 다시 인쇄합니다. 즉 {"SC":"200","data":"getWhatsOn"}입니다. 내가 언급 한 바와 같이 jQuery를 사용하는 브라우저에서 작동하지만 PHP에서 $ _POST [ 'method']는 요청이 iPhone에서 온 경우 null을 반환합니다.

답변

0
NSString *Sc= @"200"; 
NSString *[email protected]"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); 

} 
+0

답변에 대한 설명을 추가해야합니다. –

+0

그래,이 방법을 사용할 때도 여전히 같은 문제가 발생합니다. 내 사전은 어떻게되어야 하는가입니다. 사전을 게시하는 메커니즘에서 잘못된 점이 있습니다. – SamRowley