先验知识——什么是ASIHTTPRequest?

使用iOS SDK中的HTTP网络请求API,相当的复杂,调用很繁琐,ASIHTTPRequest就是一个对CFNetwork API进行了封装,并且使用起来非常简单的一套API,用Objective-C编写,可以很好的应用在Mac OS X系统和iOS平台的应用程序中。ASIHTTPRequest适用于基本的HTTP请求,和基于REST的服务之间的交互。

如何使用ASIHTTPRequest?

网上有很多专门介绍ASIHTTPRequest使用的文章,很详细,楼主就不赘述了哈,在此给出一篇经典的介绍详细的文章链接:http://www.cnblogs.com/dotey/archive/2011/05/10/2041966.html

上传JSON格式数据

首先给出主功能代码段,然后对代码进行详细解析:

  1. NSDictionary *user = [[NSDictionary alloc] initWithObjectsAndKeys:@"0", @"Version", nil];
  2. if ([NSJSONSerialization isValidJSONObject:user])
  3. {
  4. NSError *error;
  5. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:user options:NSJSONWritingPrettyPrinted error: &error];
  6. NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];
  7. //NSLog(@"Register JSON:%@",[[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding]);
  8. NSURL *url = [NSURL URLWithString:@"http://42.96.140.61/lev_version.php"];
  9. ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
  10. [request addRequestHeader:@"Content-Type" value:@"application/json; encoding=utf-8"];
  11. [request addRequestHeader:@"Accept" value:@"application/json"];
  12. [request setRequestMethod:@"POST"];
  13. [request setPostBody:tempJsonData];
  14. [request startSynchronous];
  15. NSError *error1 = [request error];
  16. if (!error1) {
  17. NSString *response = [request responseString];
  18. NSLog(@"Test:%@",response);
  19. }
  20. }

代码段第一行:

  1. NSDictionary *user = [[NSDictionary alloc] initWithObjectsAndKeys:@"0", @"Version", nil];

构造了一个最简单的字典类型的数据,因为自iOS 5后提供把NSDictionary转换成JSON格式的API。

第二行if判断该字典数据是否可以被JSON化。

  1. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:user options:NSJSONWritingPrettyPrinted error: &error];

这一句就是把NSDictionary转换成JSON格式的方法,JSON格式的数据存储在NSData类型的变量中。

  1. NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];

这一句是把NSData转换成NSMutableData,原因是下面我们要利用ASIHTTPRequest发送JSON数据时,其消息体一定要以NSMutableData的格式存储。

下面一句注视掉的语句

  1. //NSLog(@"Register JSON:%@",[[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding]);

主要作用是记录刚才JSON格式化的数据

下面到了ASIHTTPRequest功能部分:

  1. NSURL *url = [NSURL URLWithString:@"http://xxxx"];
  2. ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

这两句的主要功能是设置要与客户端交互的服务器端地址。

接下来两句:

  1. [request addRequestHeader:@"Content-Type" value:@"application/json; encoding=utf-8"];
  2. [request addRequestHeader:@"Accept" value:@"application/json"];

是设置HTTP请求信息的头部信息,从中可以看到内容类型是JSON。

接下来是设置请求方式(默认为GET)和消息体:

  1. [request setRequestMethod:@"POST"];
  2. [request setPostBody:tempJsonData];

一切设置完毕后开启同步请求:

  1. [request startSynchronous];

最后的一段:

  1. if (!error1) {
  2. NSString *response = [request responseString];
  3. NSLog(@"Rev:%@",response);
  4. }

是打印服务器返回的响应信息。

iOS通过ASIHTTPRequest提交JSON数据的更多相关文章

  1. ngResource提交json数据如何带参数

    ngResource提交json数据如何带参数 直接使用ngResource和REST服务接口交互可以让程序显得简洁,前提是配置好跨域和OPTIONS请求的支持,与此同时,如果需要带些额外的参数,有两 ...

  2. iOS开发网络篇—JSON数据的解析

    iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式 ...

  3. Jquery Ajax 提交json数据

    在MVC控制器(这里是TestController)下有一个CreateOrder的Action方法 [HttpPost] public ActionResult CreateOrder(List&l ...

  4. Jquery-ajax()方法提交json数据

    1.ajax()提交json数据代码 var strJson = getStrPayJson(); $.ajax({ type: "POST", url: "/userc ...

  5. ajax提交json数据到后端C#解析

    本文链接:https://blog.csdn.net/qq_22103321/article/details/78015920 前端提交json数据 $.ajax({ type: "post ...

  6. 前端ajax用post方式提交json数据给后端时,网络报错 415

    项目框架:spring+springmvc+mybatis 问题描述:前端ajax用post方式提交json数据给后端时,网络报错 415 前端异常信息:Failed to load resource ...

  7. 导出excel时,以form方式提交json数据

    今天在写项目时写到一个excel的导出,开始想用ajax请求后台后导出,但发现ajax会有返回值,而且ajax无法直接输出文件,而后台的excel导出方法已经封装好,不方便修改. 就改用了提交的方式f ...

  8. iOS开发-简单解析JSON数据

    什么是JSON   JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典和数组   {“nam ...

  9. jQuery提交Json数据到Webservice,并接收返回的Json数据

    jQuery ajax webservice:get 和 post 一.GET 方式 客户端 复制代码 代码如下: var data = { classCode: "0001"}; ...

随机推荐

  1. yii 10.16

    什么是框架? a)         框架就是一个半成品,一个帮助我们完成业务流程的程序 b)        框架融合了很多的功能,但是不会给我们具体功能模块 c)         我们需要在框架的基础 ...

  2. 旋转屏幕时,假如自定义的xib大小变了,可能是这个属性没有修改

    虽然xib内部启用了自动布局,但是当xib放入外界,xib自身的autoresizing是存在的

  3. windows2003安全加固

    因为IIS的方便性和易用性,使它成为最受欢迎的Web服务器软件之一.但是,IIS的安全性却一直令人担忧.如何利用IIS建立一个安全的Web服务器,是很多人关心的话题.要创建一个安全可靠的Web服务器, ...

  4. C++_Eigen函数库用法笔记——Matrix and Vector Arithmetic

    Addition and subtraction Scalar multiplication and division Transposition Matrix-matrix and matrix-v ...

  5. BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler错误的解决方法

    出现这个问题是因为我的spring3.0里的包是单独引用的,缺少了别的包 譬如Configuration problem: Unable to locate Spring NamespaceHandl ...

  6. 如何卸载lnmp

    转自:https://www.centos.bz/2011/07/howto-remove-lnmp/ killall nginx /etc/init.d/mysql stop killall mys ...

  7. seajs+spm之再研究

    好久没有用seajs了,之前对spm也只是一知半解,这些天再次拿起来研究.谈谈我的认识与理解. 声明:本文不适合对seajs完全不了解的同学阅读.对于想知道seajs来龙去脉以及spm相关的同学&qu ...

  8. jQuery类库的设计

    目前为止,jquery是js社区中最活跃.用户最多的前端类库,具有链式操作.兼容性.基于数组的操作.强大的插件机制等特点,也是很多前端入门同学最早接触到的库.但是内部如何实现的,一直吸引着我.因此最近 ...

  9. Spark-1.0.0 standalone分布式安装教程

    Spark目前支持多种分布式部署方式:一.Standalone Deploy Mode:二Amazon EC2.:三.Apache Mesos:四.Hadoop YARN.第一种方式是单独部署,不需要 ...

  10. Power of Cryptography(用double的泰勒公式可行分析)

    Power of Cryptography Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onli ...