详解iOS通过ASIHTTPRequest提交JSON数据
先验知识——什么是ASIHTTPRequest?
使用iOSSDK中的HTTP网络请求API,相当的复杂,调用很繁琐,ASIHTTPRequest就是一个对CFNetworkAPI进行了封装,并且使用起来非常简单的一套API,用Objective-C编写,可以很好的应用在MacOSX系统和iOS平台的应用程序中。ASIHTTPRequest适用于基本的HTTP请求,和基于REST的服务之间的交互。
上传JSON格式数据
首先给出主功能代码段,然后对代码进行详细解析:
NSDictionary*user=[[NSDictionaryalloc]initWithObjectsAndKeys:@"0",@"Version",nil]; if([NSJSONSerializationisValidJSONObject:user]) { NSError*error; NSData*jsonData=[NSJSONSerializationdataWithJSONObject:useroptions:NSJSONWritingPrettyPrintederror:&error]; NSMutableData*tempJsonData=[NSMutableDatadataWithData:jsonData]; //NSLog(@"RegisterJSON:%@",[[NSStringalloc]initWithData:tempJsonDataencoding:NSUTF8StringEncoding]); NSURL*url=[NSURLURLWithString:@"http://42.96.140.61/lev_version.php"]; ASIHTTPRequest*request=[ASIHTTPRequestrequestWithURL:url]; [requestaddRequestHeader:@"Content-Type"value:@"application/json;encoding=utf-8"]; [requestaddRequestHeader:@"Accept"value:@"application/json"]; [requestsetRequestMethod:@"POST"]; [requestsetPostBody:tempJsonData]; [requeststartSynchronous]; NSError*error1=[requesterror]; if(!error1){ NSString*response=[requestresponseString]; NSLog(@"Test:%@",response); } }
代码段第一行:
NSDictionary*user=[[NSDictionaryalloc]initWithObjectsAndKeys:@"0",@"Version",nil];
构造了一个最简单的字典类型的数据,因为自iOS5后提供把NSDictionary转换成JSON格式的API。
第二行if判断该字典数据是否可以被JSON化。
NSData*jsonData=[NSJSONSerializationdataWithJSONObject:useroptions:NSJSONWritingPrettyPrintederror:&error];
这一句就是把NSDictionary转换成JSON格式的方法,JSON格式的数据存储在NSData类型的变量中。
NSMutableData*tempJsonData=[NSMutableDatadataWithData:jsonData];
这一句是把NSData转换成NSMutableData,原因是下面我们要利用ASIHTTPRequest发送JSON数据时,其消息体一定要以NSMutableData的格式存储。
下面一句注视掉的语句
//NSLog(@"RegisterJSON:%@",[[NSStringalloc]initWithData:tempJsonDataencoding:NSUTF8StringEncoding]);
主要作用是记录刚才JSON格式化的数据
下面到了ASIHTTPRequest功能部分:
NSURL*url=[NSURLURLWithString:@"http://xxxx"]; ASIHTTPRequest*request=[ASIHTTPRequestrequestWithURL:url];
这两句的主要功能是设置要与客户端交互的服务器端地址。
接下来两句:
[requestaddRequestHeader:@"Content-Type"value:@"application/json;encoding=utf-8"]; [requestaddRequestHeader:@"Accept"value:@"application/json"];
是设置HTTP请求信息的头部信息,从中可以看到内容类型是JSON。
接下来是设置请求方式(默认为GET)和消息体:
[requestsetRequestMethod:@"POST"]; [requestsetPostBody:tempJsonData];
一切设置完毕后开启同步请求:
[requeststartSynchronous];
最后的一段:
if(!error1){ NSString*response=[requestresponseString]; NSLog(@"Rev:%@",response); }
是打印服务器返回的响应信息。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。