ASIHTTPRequest框架使用(2)--发送异步请求

同步请求一般只是用在某个子线程中使用,而不在主线程中使用。异步请求的用户体验要比同步请求好,因此一般情况下异步请求用的多。

ASIHTTPRequest和ASIFormDataRequest两个请求类都可以发送异步请求。ASIFormDataRequest继承了ASIHTTPRequest异步请求方法,所以重点介绍ASIHTTPRequest的异步请求。

1、借助Delegate处理请求

- (void)startRequest

{

    NSString *strUrl = [[NSString alloc]
initWithFormat:@"http://iosbook3.com/service/mynotes/webservice.php?                      email=%@&type=%@&action=%@",@"[email protected]",@"JSON",@"query"];

    NSURL *url = [NSURL
URLWithString:[strUrl URLEncodedString]];

    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

    // 设置代理

    [request setDelegate:self];

    [request startAsynchronous];
}

#pragma mark - 代理方法 【默认调用的代理方法】

- (void)requestFinished:(ASIHTTPRequest *)request

{

    NSData *data = [request responseData];

    NSDictionary *resDict = [NSJSONSerialization
JSONObjectWithData:data options:NSJSONReadingAllowFragments
error:nil];

    。。。。

}

- (void)requestFailed:(ASIHTTPRequest *)request

{

    NSError *error = [request error];

    NSLog(@"%@",[error localizedDescription]);

}

自定义回调方法:

- (void)startRequest

{

  ....

  // 自定义回调方法

  [request setDidFinishSelector:@selector(requestSuccess:)];

  [request setDidFailSelector:@selector(requestError:)];

}

- (void)requestSuccess:(ASIHTTPRequest *)request

{

    NSData *data = [request responseData];

    NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingAllowFragments error:nil];

    。。。。

}

- (void)requestError:(ASIHTTPRequest *)request

{

    NSError *error = [request error];

    NSLog(@"%@",[error localizedDescription]);

}

2、借助“Block”处理请求

- (void)startRequest

{

    NSString *strUrl = [[NSString alloc]
initWithFormat:@"http://iosbook3.com/service/mynotes/webservice.php?                      email=%@&type=%@&action=%@",@"[email protected]",@"JSON",@"query"];

    NSURL *url = [NSURL
URLWithString:[strUrl URLEncodedString]];

    __weak  ASIHTTPRequest
*request = [ASIHTTPRequest requestWithURL:url];     【1】

    [request setCompletionBlock:^{  // 设置成功完成时回调的Block

      NSData *data = [request responseData];

      NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingAllowFragments error:nil];

      。。。。

    }];

    [request setFailedBlock:^{  // 设置失败时回调的Block

      NSError *error = [request error];

      NSLog(@"%@",[error localizedDescription]);

    }];

    [request startAsynchronous];
}

【1】:__weak关键字的意思是ASIHTTPRequest对象是弱引用,不进行保持处理。目的是为了避免循环引用,造成内存泄露。

时间: 2024-10-15 18:11:38

ASIHTTPRequest框架使用(2)--发送异步请求的相关文章

ASIHTTPRequest框架使用(1)--发送同步请求

ASIHTTPRequest框架是优秀的第三方OC的HTTP框架,支持Mac OS X和iOS下得HTTP开发. 具有如下优点: 1.支持下载数据放在内存或本地文件 2.容易访问请求和应答HTTP Header 3.支持Cookie 4.支持GZip请求或应答(?) 5.支持缓存 6.支持同步或异步请求 7.支持HTTPs 但是,ASIHTTPRequest不支持ARC. 配置ASI框架:向项目中导入ASI框架之后,还要向工程中引入一些框架和类库: CFNetwork.framework,Sys

AJAX的来龙去脉(由来)-如果被封装出来的--ajax发送异步请求(四步操作)

<黑马程序员_超全面的JavaWeb视频教程vedio\JavaWeb视频教程_day23_ajax> \JavaWeb视频教程_day23_ajax\day23ajax_avi\14.打包ajax生成小工具.avi;  有介绍: 个人理解:就是封装了 XMLHttpRequest 的请求方法:演变而成我们常用的 ajax: =====原始的请求方式: ajax发送异步请求(四步操作) 1. 第一步(得到XMLHttpRequest) * ajax其实只需要学习一个对象:XMLHttpRequ

使用Ajax发送异步请求的步骤

1.获取Ajax对象:获取XMLHttpRequest对象实例 function getXhr(){ var xhr = null; if(window.XMLHttpRequest){ xhr = new XMLHttpRequest();//非IE浏览器 }else{ xhr = new ActiveXObject('Microsoft.XMLHttp');//IE浏览器 } return xhr; } 2.设置回调函数:为Ajax对象的readystatechange事件设定响应函数 xh

【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回

作者:ssslinppp      时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MVC与json参考文章:[spring学习笔记-mvc-3]返回json数据-方式1  和 [spring学习笔记-mvc-4]返回json数据-方式2. 使用到的技术主要如下: Ajax:使用JQuery 提供的ajax:==>需要引入jquery.min.js文件: Spring MVC: Jso

使用AJAX技术发送异步请求,HTTP服务端推送

使用AJAX技术发送异步请求 什么是AJAX AJAX指一步Javascript和XML(Asynchronous JavaScript And XML),它是一些列技术的组合,简单来说AJAX基于XMLHttpRequest让我们在不重载页面的情况下和服务器进行数据交换. 加上JavaScript和DOM(Document Object Model,文档对象模型),我们就可以在接收到响应数据后局部更新页面.XML指的是数据的交互模式,可以是纯文本(Plain Text).HTML或JSON.

ASIHTTP 框架,同步、 异步请求、 上传 、 下载

ASIHTTPRequest详解 ASIHTTPRequest 是一款极其强劲的 HTTP 访问开源项目.让简单的 API 完成复杂的功能,如:异步请求,队列请求,GZIP 压缩,缓存,断点续传,进度跟踪,上传文件,HTTP 认证.在新的版本中,还加入了 Objective-C 闭包 Block 的支持,让我们的代码加轻简灵活. 下面就举例说明它的 API 用法. 发起一个同步请求 同步意为着线程阻塞,在主线程中使用此方法会使应用Hang住而不响应任何用户事件.所以,在应用程序设计时,大多被用在

.Net core webapi使用httpClient发送异步请求遇到TaskCanceledException: A task was canceled

前言:本人最近较多使用.net core的项目,最近在使用httpClient发送请求的时候,遇到服务器处理时间较长时,就老是会报异常:TaskCanceledException: A task was canceled.   我的使用异步请求的方法也较为老套,使用的Task a=()=>{};   a.Wait();  来等待异步操作的结束,这种方式执行等待时,就常会出现上面的异常信息,在.net Core中httpClient添加配置超时时长也没用: services.AddHttpClie

使用jQuery发送异步请求

具体格式如下 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":"

ajax发送异步请求

一:得到XMLHttpRequest对象 ajax其实只需要学习XMLHttpRequest一个对象 大多数浏览器都支持: var xmlHttp = new XMLHttprequest(); IE 6.0: var mltHttp = new ActiveXObject("Msxml2.XMLHTTP"); IE 5.5 及更早的IE var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); * 编写创建XMLH