ASIHttpRequest POST

时间:2011-10-31 20:47:35

标签: iphone asihttprequest

我正在开发一个iphone应用程序,我的要求是向Web服务发一个简单的帖子,Web服务返回一个json响应。

他们为帖子提供的示例代码是这样的,但我如何得到回复?我看到有一个用于获取get的异步代码,但是我如何为帖子做异步?

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

2 个答案:

答案 0 :(得分:4)

如果你的目标是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

答案 1 :(得分:0)

这用于发布同步响应,响应将在var“response”中。

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

我使用了普通类型的请求,您可以用ASIFormDataRequest替换ASIHTTPRequest类。