我正在开发一个iphone应用程序,我的要求是向Web服务发一个简单的帖子,Web服务返回一个json响应。
他们为帖子提供的示例代码是这样的,但我如何得到回复?我看到有一个用于获取get的异步代码,但是我如何为帖子做异步?
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request addPostValue:@"Ben" forKey:@"names"];
[request addPostValue:@"George" forKey:@"names"];
答案 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];
答案 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类。