2011-03-11 37 views
1

我正在尋找從iPhone SDK調用HTTP_POST到我的服務器上的PHP文件。如果我把這個如下:使用JSON從iPhone SDK HTTP_POST

NSMutableDictionary *requestDictionary = [NSMutableDictionary dictionary]; 
[requestDictionary setObject:@"testvalue" forKey:@"test"]; 
[requestDictionary setObject:@"test2value" forKey:@"test2"]; 
[requestDictionary setObject:@"test3value" forKey:@"test3"]; 

NSString *jsonString = [requestDictionary JSONRepresentation]; 
NSString *urlString = @"http://www.example.org"; 

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString] 
                   cachePolicy:NSURLRequestUseProtocolCachePolicy 
                  timeoutInterval:CONNECTION_TIMEOUT]; 

NSData *requestData = [NSData dataWithBytes:[jsonString UTF8String] length:[jsonString length]]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody: requestData]; 

NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

我應該能夠接受這個職位數據像這樣(在PHP):

echo "Hello"; 

if(isset($_POST['test'])) 
{ 
    echo $_POST['test']; 
} 

編輯:

要進行測試,在我的connectionDidFinishLoading我M只是記錄整個迴應

- (void)connectionDidFinishLoading:(NSURLConnection *)conn 
{ 
    NSString *responseString = [[NSString alloc] initWithData:dataRecieved encoding:NSASCIIStringEncoding]; 
    [dataRecieved release]; 
    NSLog(@"Response: %@", responseString); 
} 

我收到你好,我在尋找帖子前回應,但沒有別的。有誰知道我要去哪裏錯了?

+0

它在做什麼? – KevinDTimm 2011-03-11 14:13:16

+0

參見編輯。謝謝 – 2011-03-11 14:17:09

+0

JSONRepresentation不起作用 – 2011-10-13 10:28:26

回答

2

您的請求正文是JSON值,但您的服務器期望application/x-www-form-urlencoded編碼字段。

您可以將字典轉換爲具有以下類別的編碼字段。

@interface NSDictionary (FormData) 

- (NSString*) formUrlEncodedData; 

@end 
@implementation NSDictionary (FormData) 

- (NSString*) formUrlEncodedData 
{ 
    NSString *result = nil; 

    for(NSString *k in [self keyEnumerator]) { 
     if (![result isEqual:@""]) { 
      result = [result stringByAppendingString:@"&"]; 
     } 

     result = [result stringByAppendingString:[k stringByUrlEncoding]]; 
     result = [result stringByAppendingString:@"="]; 
     NSString *v = [self objectForKey:k]; 
     result = [result stringByAppendingString:[v stringByUrlEncoding]]; 
    } 
    return result; 
} 

@end 

凡stringByUrlEncoding由上NSString的類別,這是我從Cocoanetics來源提供。

@interface NSString (Helpers) 

- (NSString*) stringByUrlEncoding; 

@end 
@implementation NSString (UrlEncoding) 

- (NSString*) stringByUrlEncoding 
{ 
    return (NSString*)CFURLCreateStringByAddingPercentEscapes(NULL, 
          (CFStringRef)self, 
          NULL, 
          (CFStringRef)@"!*'();:@&=+$,/?%#[]", 
          kCFStringEncodingUTF8); 
} 

@end 
+0

我可以更改服務器以期待JSON嗎?謝謝 – 2011-03-11 14:19:50

+0

這個'header('Content-type:text/json');'是我需要在服務器上調用嗎? – 2011-03-11 14:34:48

+0

從PHP讀取JSON請求應該是一個不同的問題。 – 2011-03-11 14:43:23

0

您將在NSURLConnection委託方法中獲得響應。一旦你得到響應,你可以使用NSXMLParser來解析它並獲得你想要的字段。讓我知道你是否需要額外的信息。將嘗試發佈一些相關的代碼。

+0

請參閱我的編輯。謝謝 – 2011-03-11 14:16:01

0

如果我可以給你一個建議。檢查Facebook IOS SDK的源代碼。 這是學習新技術的好方法。