1.2 网络请求-异步请求
2019-04-17 本文已影响0人
草根小强
网络请求-异步请求
//Q:在实际应用中,用户的信息,并不是保存在某一个设备上,如果还按照我们之前处理数据块的方式,只保存到沙盒(SandBox)中,会导致这个信息,只有在这个设备上才能访问。
//A:基本上所有的应用程序,都会把数据保存到云端,服务器端,在数据库中做存储。
//常用的数据库:SQL Server,mySql,Orical
//Q:怎么在客户端去获取服务器端的数据
//A: HTTP请求
//分为两步:
//1、向服务器端发一个数据,请求(Request);
//2、服务器返回一个 响应(Response);
//Requst 请求,分为请求头和请求体。
//Resonse 响应,分为响应头和响应体
//HTTP 是一个协议(被动的,只能是我们发请求,他给我们响应)
//HTTP 是一个超文本传输协议
//数据请求:
//方式:通过接口的方式
//http://www.baidu.com
// 协议:(不写协议头默认是http://)
//接口格式:
// 协议://主机(host):端口/路径(要访问的文件的路径) ? 键值对参数 key=value&key=vakule...
//注意:接口里面不能有中文!!!接口里面不能有个空格!!!
//例子
//需求:在www.baidu.com这个主机上,有一个叫做userinfo.php这个文件,地址是login/login2/userinfo.php 访问这个文件:http://www.baidu.com/login/login2/userinfo.php
//www.baidu.com 主机上有一个叫做login.php这样的文件,路径是login/login.php,我们需要传两个参数 分别是username 和 password 端口是8088
//http://www.baidu.com:8088/login/login.php?username=zhangsan&&password=123456
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self aboutNSURLConnection];
}
#pragma mark ----------异步请求的协议方法-------------
// 服务器端告诉客户端,数据查询的结果
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
//在这里,这个response 是可以转换成
NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
//状态代码
if (res.statusCode==200) {
//正确的,成功的返回
//开始拼接数据前,把原来的内容清空了
[_allData setLength:0];
}else if (res.statusCode ==404) {
//文件不存在
}
}
//如果上面的statusCode 是一个成功的 200,接收数据
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
//这个方法,会被执行N多次,取决于数据的大小。
//在这个方法里,我们要做的就是数据的拼接的
//数据拼接之前,需要清空原来的内容
//data表示要拼接的数据
[_allData appendData:data];
}
//数据加载完成(被执行一次)
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSLog(@"数据加载完成");
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:_allData options:NSJSONReadingMutableContainers error:nil];
NSLog(@"%@",dict);
}
//数据请求失败
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSLog(@"数据请求失败");
}