先验知识——什么是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. 安装make命令

    步骤1:通过root用户将两个iso源上传到被测试服务器的/opt/huawei/software/iso目录下. # mkdir -p /opt/huawei/software/iso 挂载iso源 ...

  2. easyui datagrid 编辑器绑定事件

    依照网上的和自己想的,在获取编辑器后直接绑定事件,思路没有问题,但是总是不响应 细细浏览网上的资料,无意中看到editor 的type 类型和自己写的不一致,自己写的是textbox,而网上的是val ...

  3. OGNL和Struts2标签

    OGNL和Struts2标签 你使用过的OGNL 页面获取并输出Action属性<s:property value="userName"/> 页面中获取request保 ...

  4. [Angularjs]ng-switch用法

    用法描述 ng-switch根据表达式的值显示或这隐藏对应部分.类似c#或者其他预览里面的switch用法.可以慢慢体会. 说道ng-switch就要说到子元素该怎么根据当前值进行变化.子元素可以通过 ...

  5. linux在所有文件中查找某一个字符

    # find <directory> -type f -name "*.c" | xargs grep "<strings>" < ...

  6. win7能上网,上网图标显示红叉的解决办法

    今天笔记本开机,发现电脑可以上网,但是上网图标显示红叉,看这很不爽,在网上搜了解决版本. 其实很简单,你按照下面步骤操作即可. 1,右击小图标,打开网络和共享中心. 2,更改适配器设置 把无用的无线都 ...

  7. Zhulina 的高分子刷理论

    高分子刷的解析平均场理论有两种表述方式.一个是MWC理论(Macromolecules 1988, 21, 2610-2619),另外一个就是Zhulina和Birshtein这两位俄罗斯老太太的理论 ...

  8. Intent的Flag

    小段代码: Intent it=new Intent(); it.setClass(Setting.this,Main.class);//从Setting跳转到Main it.addFlags(Int ...

  9. [codeforces 293]A. Weird Game

    [codeforces 293]A. Weird Game 试题描述 Yaroslav, Andrey and Roman can play cubes for hours and hours. Bu ...

  10. Matlab实现线性回归和逻辑回归: Linear Regression & Logistic Regression

    原文:http://blog.csdn.net/abcjennifer/article/details/7732417 本文为Maching Learning 栏目补充内容,为上几章中所提到单参数线性 ...