2011-10-31 55 views
1

我正在研究iPhone应用程序,我的要求是对web服务进行简单的发布,并且web服务返回json响应。ASIHttpRequest POST

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

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

回答

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

0

您用于发布同步响应的响应将在var“响应”中。

- (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类的格式将被称为请求在这个例子中。

你PARAMS你可以把像你自己说:

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

我使用了一个普通型的要求,你可以用ASIFormDataRequest更换ASIHTTPRequest类。