/** * ASI的get异步请求 * 须知:ASI监听请求过程有delegate、block和selector三种方式, * 经测试发现,delegate和block可以同时执行,selector和block也可以同时执行,但delegate和selector共存时(包括三者共存)不执行delegate * 执行顺序:delegate > selector > block * 通过responseData和responseString获取不到数据 * 使用了代理就不能直接通过responseData和responseString获取到数据 */ -(void) asiGetAsynch{ // 获取url NSURL *url = [[NSURL alloc] initWithString:@"http://localhost:8070/MJServer/video"]; // 获取asi请求对象 ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; // 设置ASIHTTPRequestDelegate代理。 request.delegate = self; // 发送异步请求 [request startAsynchronous]; // 设置监听请求过程的block [request setStartedBlock:^{ NSLog(@"block请求开始"); }]; [request setDataReceivedBlock:^(NSData *data) { NSLog(@"block获得请求数据 -- %@", [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]); }]; [request setCompletionBlock:^{ NSLog(@"block请求结束"); }]; // 设置监听请求过程的selector [request setDidStartSelector:@selector(start:)]; [request setDidReceiveDataSelector:@selector(receiveData:)]; [request setDidFinishSelector:@selector(finish:)]; } #pragma mark selector监听方法 -(void)start:(ASIHTTPRequest *)request{ NSLog(@"selector请求开始"); } -(void) receiveData:(ASIHTTPRequest *) request{ // 这里获取不到数据 NSLog(@"selector获得请求数据 -- %@", [request responseString]); } -(void)finish:(ASIHTTPRequest *)request{ NSLog(@"selector请求结束"); } #pragma mark 实现ASIHTTPRequestDelegate的代理方法 - (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data{ NSLog(@"delegate获得请求数据 -- %@", [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]); } - (void)requestStarted:(ASIHTTPRequest *)request{ NSLog(@"delegate请求开始"); } - (void)requestFinished:(ASIHTTPRequest *)request{ NSLog(@"delegate请求结束"); } - (void)requestFailed:(ASIHTTPRequest *)request{ NSLog(@"delegate请求失败"); } |