2012-06-14 4 views
4

Я пытаюсь отправить данные JSON на веб-сервер через код ниже. По какой-то причине запрос, похоже, не выходит. Как это выглядит, как я пропал? Также результат NSURLConnection (retStr) всегда пуст?Отправить данные JSON с NSURLConnection в Xcode

NSDictionary *data = [NSDictionary dictionaryWithObject:@"test sending ios" forKey:@"value1"]; 
NSError *error; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:data options:kNilOptions error:&error]; 

    NSURL *url = [NSURL URLWithString:@"http://webserveraddress"]; 
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url cachePolicy:nil timeoutInterval:60]; 
[req setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[req setValue:[NSString stringWithFormat:@"%d", [jsonData length]] forHTTPHeaderField:@"Content-Length"]; 
[req setHTTPMethod:@"POST"]; 
[req setHTTPBody:jsonData]; 
NSString *retStr = [[NSString alloc] initWithData:[NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil] encoding:NSUTF8StringEncoding]; 
+0

просто мнение вы должны послать переменную POST на сервер и получить JSON из него. Это будет проще, особенно если вы подключаетесь через http-соединение. проще и быстрее. И вы можете просто поместить в HTTPBody NSString строкуWithFormat: @ "var1 =% @ & var2 =% @ & var3 =% @ ..." и на сервере, который у вас есть в php $ _POST ['var1'], $ _POST ['var2 '] и т. д. –

+0

@NicolasManzini Можете ли вы дать мне примерный код для этого. Я попытался переставить код выше и удалить NSJSONSerialization, и я все еще не получаю POST на своем веб-сервере? Мне нужно удалить: [[NSString alloc] initWithData: [NSURLConnection sendSynchronousRequest: req returnResponse: nil error: nil] encoding: NSUTF8StringEncoding]? – Nick

ответ

3

Для отправки простых данных в почтовом Варсе на ваш веб-сервер работает PHP вы просто сделать это в

Пример

NSString * key = [NSString stringWithFormat:@"var1=%@&var2=%@&var3=%@",@"var1String" ,@"var2string" ,[NSnumber numberWithBool:YES]]; 

NSURL * url = [NSURL URLWithString:@"http://webserver.com/yourScriptPHP.php"]; 

NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url]; 

[request setHTTPMethod:@"POST"]; 
[request setHTTPBody:[key dataUsingEncoding:NSUTF8StringEncoding]]; 

[[NSURLConnection alloc] initWithRequest:request delegate:self]; 
// this is for you to be able to get your server answer. 
// you will need to make your class a delegate of NSURLConnectionDelegate and NSURLConnectionDataDelegate 
myClassPointerData = [[NSMutableData data] retain]; 

Реализовать

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [myClassPointerData appendData:data] 
} 

-(void)connection:(NSURLConnection *)connection DidFinishLoading { 
    // do what you want with myClassPointerData the data that your server did send you back here 
    // for info on your server php script you just need to do: echo json_encode(array('var1'=> $var1, 'var2'=>$var2...)); 
    // to get your server sending an answer 
} 
+0

Не забудьте освободить свой NSURLCOnnecion и ваш myClassPointerData –

+0

это похоже на то, что я закончил делать, спасибо, помощник! – Nick

0

раз проверить, как это

ASIFormDataRequest запрос * = [ASIFormDataRequest requestWithURL: [NSURL URLWithString: @ "Ура URL"]];

[request setPostValue:appdelegate.userid forKey:@"userid"]; 
[request setPostValue:self.nameLbl.text forKey:@"username"]; 
[request setPostValue:self.website.text forKey:@"website"]; 

NSLog(@"~~~~~~ request~~~~~ %@",request); 

[request setTimeOutSeconds:5000]; 
[request startSynchronous]; 
0

Вместо отправка как JSON, вы можете просто отправить его обычным способом - установив HTTPBody запроса с помощью метода POST.

Только вам нужно разностный сделать, если вам нужно, чтобы сделать звонок, такими как «http://abc.example.com/user_profile.json?user[first_name]=fdffdf & пользователя [last_name] = dffdf»

- это то, что ваши словарные ключи имеют префикс. То есть «first_name = fdffdf» необходимо изменить на «user [first_name] = fdffdf».

Попробуйте этот бит кода для изменения словаря параметров в требуемый формат для JSON ..

for (id key in [self allKeys]) { 
NSString *newKey = [NSString stringWithFormat:@"%@[%@]", parent, key]; 
[result setObject:[self objectForKey:key] forKey:newKey]; 
} 
Смежные вопросы