利用ASIHTTPRequest也可以向服务器提交请求参数,今天就做一个登录的例子,客户端发送XML请求,然后得到服务端的响应,响应的结果是返回XML字符串。直接上代码吧,代码中有详细注释。
首先在.h文件中做如下声明:
- #import <UIKit/UIKit.h>
- @interface ViewController : UIViewController
- @property (retain,nonatomic) UIActivityIndicatorView *indicator;
- @property (retain, nonatomic) IBOutlet UITextField *userNameTextField;
- @property (retain, nonatomic) IBOutlet UITextField *passwordTextField;
- - (IBAction)login:(id)sender;
- @end
然后是.m实现文件(这里只列出了主要代码部分):
- //使用异步请求并更新UI
- - (IBAction)login:(id)sender {
- //弹出加载提示框
- [self showToast:@"正在登陆..."];
- /*执行登陆请求
- 服务端为跑在Tomcat上的一个Servelet
- 请求方式采用xml,格式如下:
- <Document>
- <User id ="xxx" password=”xxx”/>
- </Document>
- 请求结果返回一个XML字符串,这里的服务器地址我省略了,因为用的是以前一个项目的服务器,这里没法公开
- */
- __block ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"http://xxx/server/Login"]];
- //构建可变字符串请求
- NSMutableString *requestXML = [[NSMutableString alloc] init];
- [requestXML appendString:@"<Document>"];
- [requestXML appendString:@"<User id=\""];
- [requestXML appendString:self.userNameTextField.text];
- [requestXML appendString:@"\" "];
- [requestXML appendString:@"password=\""];
- [requestXML appendString:self.passwordTextField.text];
- [requestXML appendString:@"\"/>"];
- [requestXML appendString:@"</Document>"];
- //将NSString类型转换成NSData类型,后面的参数为编码类型,这里是UTF-8
- NSData *requestData = [requestXML dataUsingEncoding:NSUTF8StringEncoding];
- //使用ASIHTTPRequest中的自定义请求参数的方法
- [request appendPostData:requestData];
- //设置请求方式
- [request setRequestMethod:@"POST"];
- //请求执行完会调用block中的代码
- [request setCompletionBlock:^{
- NSLog(@"Success");
- NSLog(@"%@",[request responseString]);
- [self.indicator stopAnimating];
- [alertView dismissWithClickedButtonIndex:0 animated:YES];
- [self.indicator release];
- [alertView release];
- }];
- //如果出现异常会执行block中的代码
- [request setFailedBlock:^{
- NSLog(@"Failed");
- [self.indicator stopAnimating];
- [alertView dismissWithClickedButtonIndex:0 animated:YES];
- [self.indicator release];
- [alertView release];
- }];
- [request startAsynchronous];
- [request release];
- }
- //构建自定义弹出提示框
- -(void)showToast:(NSString*) message
- {
- alertView = [[UIAlertView alloc] initWithTitle:message message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:nil, nil];
- [alertView setBackgroundColor:[UIColor clearColor]];
- //必须在这里调用show方法,否则indicator不在UIAlerView里面
- [alertView show];
- self.indicator = [[UIActivityIndicatorViewalloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
- self.indicator.center = CGPointMake(alertView.bounds.size.width/2, alertView.bounds.size.height-40);
- //停止时隐藏indicator
- self.indicator.hidesWhenStopped = YES;
- //将UIActivityIndicator作为子控件放在UIAlertView当中
- [alertView addSubview:self.indicator];
- [self.indicator startAnimating];
- }
下面看看运行效果和服务器的返回信息:
点击登录后,可以在控制台看到服务器返回的登录结果:
以上就是一个利用ASIHTTPRequest向服务端发送数据并获取返回结果的小例子,利用ASIHTTPRequest还有其他很多强大的功能,具体使用方法和用途可以查看官方文档。