先验知识——什么是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. 修复UIImagePickerController偷换StatusBar颜色的问题

    - (void)navigationController:(UINavigationController *)navigationController willShowViewController:( ...

  2. gcc/g++ 参数

    -static  此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么 动态连接库,就可以运行. -share  此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.

  3. 织梦(dedecms) 5.7 /plus/car.php sql注入0day

    测试方法: @Sebug.net   dis本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! <?php $host=$argv[1]; $path=$argv[2]; $ ...

  4. [PHP]array_map与array_column之间的关系

    ---------------------------------------------------------------------------------------------------- ...

  5. Windows 2008远程多用户登录的配置方法(转载)

    在使用Windows2008远程登录功能时,如果需要进行多用户登录,可以采用以下配置方法: 首先要启用远程桌面这一功能:右击“我的电脑”→属性→远程配置→远程桌面,就可以配置相应的远程桌面功能了.下 ...

  6. tcpdump 时报ServFail 0/0/1 (97)

    ServFail           结合业务应该是dns   server fail 0/0/1               1/0/0表示机器号/槽位号/子接口号                 ...

  7. Ubuntu 12.04 安装 Chrome浏览器

    1,先到chrome官网下载一个安装包 http://www.google.com/intl/zh-CN/chrome/ 2,ctrl+alt+t 打开终端. 3,在终端里输入sudo apt-get ...

  8. javascript中parentNode,childNodes,children的应用详解

    本篇文章是对javascript中parentNode,childNodes,children的应用进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助   "parentNode&qu ...

  9. Maya导入Unity的教程

    原地址:http://www.cocoachina.com/gamedev/gameengine/2010/0601/1586.html 昨天已经发布了1Vr.Cn翻译的多维材质模型烘培入Unity  ...

  10. 手把手教你用Python爬虫煎蛋妹纸海量图片

    我们的目标是用爬虫来干一件略污事情 最近听说煎蛋上有好多可爱的妹子,而且爬虫从妹子图抓起练手最好,毕竟动力大嘛.而且现在网络上的妹子很黄很暴力,一下接受太多容易营养不量,但是本着有人身体就比较好的套路 ...