详解iOS通过ASIHTTPRequest提交JSON数据

 更新时间:2016年12月26日 11:57:52   作者:浣熊  
这篇文章主要介绍了详解iOS通过ASIHTTPRequest提交JSON数据,对代码进行了详细的讲解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

先验知识——什么是ASIHTTPRequest?

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

上传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使用WebView生成长截图的第3种解决方案

    iOS使用WebView生成长截图的第3种解决方案

    这篇文章主要给大家介绍了关于iOS使用WebView生成长截图的第3种解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • 详解iOS App中调用AVAudioPlayer播放音频文件的用法

    详解iOS App中调用AVAudioPlayer播放音频文件的用法

    这篇文章主要介绍了iOS App中调用AVAudioPlayer播放音频文件的用法,AVAudioPlayer仅能播放本地文件而不能添加网络源,实例代码为Objective-C,需要的朋友可以参考下
    2016-03-03
  • iOS开发中的ViewController转场切换效果实现简介

    iOS开发中的ViewController转场切换效果实现简介

    这篇文章主要介绍了iOS开发中的ViewController转场切换效果实,主要针对iOS7以后新加入的API进行讲解,需要的朋友可以参考下
    2015-09-09
  • iOS中的UIStepper数值加减器用法指南

    iOS中的UIStepper数值加减器用法指南

    UIStepper可以有许多应用场景,比如在购物应用中制作按钮对购买商品的数量进行增或减,下面我们就一起来看看iOS中的UIStepper数值加减器用法指南
    2016-05-05
  • iOS利用NSMutableAttributedString实现富文本的方法小结

    iOS利用NSMutableAttributedString实现富文本的方法小结

    这篇文章主要给大家介绍了关于iOS利用NSMutableAttributedString如何实现富文本的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • iOS常用调试方法之静态分析详解

    iOS常用调试方法之静态分析详解

    这篇文章主要给大家介绍了关于iOS常用调试方法之静态分析的相关资料,文中通过示例代码介绍的非常详细,对各位iOS开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • iOS在固定的label上动态显示所有文字

    iOS在固定的label上动态显示所有文字

    这篇文章给大家主要介绍了iOS中如何实现,在固定的label上动态显示所有文字的方法,文中给出了示例和思路,对大家的理解很有帮助,感兴趣的朋友们下面来一起看看吧。
    2016-10-10
  • IOS 下获取 rootviewcontroller 的版本不同的问题解决办法

    IOS 下获取 rootviewcontroller 的版本不同的问题解决办法

    这篇文章主要介绍了IOS 下获取 rootviewcontroller 的版本不同的问题解决办法的相关资料,希望通过本文能帮助到大家,让大家遇到这种问题可以解决,需要的朋友可以参考下
    2017-10-10
  • iOS算法教程之分段截取常数示例

    iOS算法教程之分段截取常数示例

    这篇文章主要给大家介绍了关于iOS算法教程之分段截取常数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2018-01-01
  • iOS中Cell的Section展开和收起的示例代码

    iOS中Cell的Section展开和收起的示例代码

    本篇文章主要介绍了iOS中Cell的Section展开和收起的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08

最新评论