iOS通过ASIHTTPRequest提交JSON数据
先验知识——什么是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格式数据
首先给出主功能代码段,然后对代码进行详细解析:
- NSDictionary *user = [[NSDictionary alloc] initWithObjectsAndKeys:@"0", @"Version", nil];
- if ([NSJSONSerialization isValidJSONObject:user])
- {
- NSError *error;
- NSData *jsonData = [NSJSONSerialization dataWithJSONObject:user options:NSJSONWritingPrettyPrinted error: &error];
- NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];
- //NSLog(@"Register JSON:%@",[[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding]);
- NSURL *url = [NSURL URLWithString:@"http://42.96.140.61/lev_version.php"];
- ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
- [request addRequestHeader:@"Content-Type" value:@"application/json; encoding=utf-8"];
- [request addRequestHeader:@"Accept" value:@"application/json"];
- [request setRequestMethod:@"POST"];
- [request setPostBody:tempJsonData];
- [request startSynchronous];
- NSError *error1 = [request error];
- if (!error1) {
- NSString *response = [request responseString];
- NSLog(@"Test:%@",response);
- }
- }
代码段第一行:
- NSDictionary *user = [[NSDictionary alloc] initWithObjectsAndKeys:@"0", @"Version", nil];
构造了一个最简单的字典类型的数据,因为自iOS 5后提供把NSDictionary转换成JSON格式的API。
第二行if判断该字典数据是否可以被JSON化。
- NSData *jsonData = [NSJSONSerialization dataWithJSONObject:user options:NSJSONWritingPrettyPrinted error: &error];
这一句就是把NSDictionary转换成JSON格式的方法,JSON格式的数据存储在NSData类型的变量中。
- NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];
这一句是把NSData转换成NSMutableData,原因是下面我们要利用ASIHTTPRequest发送JSON数据时,其消息体一定要以NSMutableData的格式存储。
下面一句注视掉的语句
- //NSLog(@"Register JSON:%@",[[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding]);
主要作用是记录刚才JSON格式化的数据
下面到了ASIHTTPRequest功能部分:
- NSURL *url = [NSURL URLWithString:@"http://xxxx"];
- ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
这两句的主要功能是设置要与客户端交互的服务器端地址。
接下来两句:
- [request addRequestHeader:@"Content-Type" value:@"application/json; encoding=utf-8"];
- [request addRequestHeader:@"Accept" value:@"application/json"];
是设置HTTP请求信息的头部信息,从中可以看到内容类型是JSON。
接下来是设置请求方式(默认为GET)和消息体:
- [request setRequestMethod:@"POST"];
- [request setPostBody:tempJsonData];
一切设置完毕后开启同步请求:
- [request startSynchronous];
最后的一段:
- if (!error1) {
- NSString *response = [request responseString];
- NSLog(@"Rev:%@",response);
- }
是打印服务器返回的响应信息。
iOS通过ASIHTTPRequest提交JSON数据的更多相关文章
- ngResource提交json数据如何带参数
ngResource提交json数据如何带参数 直接使用ngResource和REST服务接口交互可以让程序显得简洁,前提是配置好跨域和OPTIONS请求的支持,与此同时,如果需要带些额外的参数,有两 ...
- iOS开发网络篇—JSON数据的解析
iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式 ...
- Jquery Ajax 提交json数据
在MVC控制器(这里是TestController)下有一个CreateOrder的Action方法 [HttpPost] public ActionResult CreateOrder(List&l ...
- Jquery-ajax()方法提交json数据
1.ajax()提交json数据代码 var strJson = getStrPayJson(); $.ajax({ type: "POST", url: "/userc ...
- ajax提交json数据到后端C#解析
本文链接:https://blog.csdn.net/qq_22103321/article/details/78015920 前端提交json数据 $.ajax({ type: "post ...
- 前端ajax用post方式提交json数据给后端时,网络报错 415
项目框架:spring+springmvc+mybatis 问题描述:前端ajax用post方式提交json数据给后端时,网络报错 415 前端异常信息:Failed to load resource ...
- 导出excel时,以form方式提交json数据
今天在写项目时写到一个excel的导出,开始想用ajax请求后台后导出,但发现ajax会有返回值,而且ajax无法直接输出文件,而后台的excel导出方法已经封装好,不方便修改. 就改用了提交的方式f ...
- iOS开发-简单解析JSON数据
什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典和数组 {“nam ...
- jQuery提交Json数据到Webservice,并接收返回的Json数据
jQuery ajax webservice:get 和 post 一.GET 方式 客户端 复制代码 代码如下: var data = { classCode: "0001"}; ...
随机推荐
- sleep()
经常看到线程中用sleep(),到底是什么用处,下面讲的比较通俗: 我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间.那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题: ...
- 简单了解Hibernate核心API
一.SessionFactory 1.它代表的是数据库的连接,其实就是在hibernate.cfg.xml文件中的配置信息 2.可以预定义SQL语句 3.SessionFactory是线程安全的,它维 ...
- CodeForces 701B Cells Not Under Attack
题目链接:http://codeforces.com/problemset/problem/701/B 题目大意: 输入一个数n,m, 生成n*n的矩阵,用户输入m个点的位置,该点会影响该行和该列,每 ...
- LWP 轻量级线程的意义与实现
转子 http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/ 二.Linux 2.4内核中的轻量进程实现 最初的进程定义都包含程序.资源 ...
- linux 下如何给用户添加权限
linux 添加用户.权限:# useradd –d /usr/sam -m sam此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr为默认的用户 ...
- Javascript网页摇一摇
function init(){ if (window.DeviceMotionEvent) { // 移动浏览器支持运动传感事件 window.addEventListener('devicemot ...
- 搜狗2013年校园招聘研发类笔试试卷之C/C++类
今天无聊在网上搜了下今年各大NB IT公司的笔试题,搜到了搜狗的,只有扫描版的试卷没有电子版也没有答案,就拿来做了做,题目非常多,涉及到C/C++.Java.数据结构.Android.IOS.Java ...
- Poj 1061 青蛙的约会(扩展GCD)
题目链接:http://poj.org/problem?id=1061 解题报告:两只青蛙在地球的同一条纬度线上,选取一个点位坐标轴原点,所以现在他们都在同一个首尾相连的坐标轴上,那么他们现在的位置分 ...
- HDU 2204 Eddy's爱好(容斥原理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2204 解题报告:输入一个n让你求出[1,n]范围内有多少个数可以表示成形如m^k的样子. 不详细说了, ...
- UISerachBar / UISearchDisplayController
1. UISerachBar 继承与UIView, 包含uitextfield, 并且实现了uitextfielddelegate代理的主要内容 含有取消按钮, 默认不显示 2. UISerachDi ...