СООБЩЕНИЕ ASIHTTPRequest

#iphone #asihttprequest

#iPhone #asihttprequest

Вопрос:

Я работаю над приложением для iPhone, и мои требования заключаются в том, чтобы сделать простое сообщение для веб-службы, а веб-служба возвращает ответ json.

Пример кода, который они дают для сообщения, таков, но как мне получить ответ? Я вижу, что есть асинхронный код для выполнения get, но как мне сделать это асинхронно для post?

 ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request addPostValue:@"Ben" forKey:@"names"];
[request addPostValue:@"George" forKey:@"names"];
 

Ответ №1:

Если вы ориентируетесь на iOS 4 , вы можете использовать блоки, что делает асинхронный код немного приятнее. Вам не придется иметь дело с делегатами.

 ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request addPostValue:@"Ben" forKey:@"names"];
[request addPostValue:@"George" forKey:@"names"];

[request setCompletionBlock:^{
    NSLog(@"%@", request.responseString);
}];

[request setFailedBlock:^{

    NSLog(@"%@", request.error);
}];

[request startAsynchronous];    
 

Подробнее о блоках
http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/00_Introduction.html

Ответ №2:

Это используется для публикации синхронного ответа, ответ будет в переменной «ответ».

 - (IBAction)grabURL:(id)sender
{
  NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
  ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
  [request startSynchronous];
  NSError *error = [request error];
  if (!error) {
    NSString *response = [request responseString];
  }
}
 

Чтобы выполнить асинхронный запрос, выполните следующие действия:

 - (IBAction)grabURLInBackground:(id)sender
{
   NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
   ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
   [request setDelegate:self];
   [request startAsynchronous];
}

- (void)requestFinished:(ASIHTTPRequest *)request
{
   // Use when fetching text data
   NSString *responseString = [request responseString];

   // Use when fetching binary data
   NSData *responseData = [request responseData];
}

- (void)requestFailed:(ASIHTTPRequest *)request
{
   NSError *error = [request error];
}
 

В основном завершенный запрос будет вызываться при наличии данных, в зависимости от формата вы можете получить либо NSData, либо NSString, как в примере.

Ваши параметры, которые вы можете ввести, как вы сами сказали:

 [request addPostValue:@"Ben" forKey:@"names"];
[request addPostValue:@"George" forKey:@"names"];
 

Я использовал обычный тип запроса, вы могли бы заменить класс ASIHTTPRequest на ASIFormDataRequest .