当前位置: 首页 > 编程笔记 >

详解iOS通过ASIHTTPRequest提交JSON数据

郎永福
2023-03-14
本文向大家介绍详解iOS通过ASIHTTPRequest提交JSON数据,包括了详解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); 
          } 

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 问题内容: 我使用POST通过AJAX将数据提交到php文件。仅提交字符串就可以很好地工作,但是现在我想使用JSON提交JS对象并在PHP端对其进行解码。 在控制台中,我可以看到我的数据已正确提交,但在PHP端,json_decode返回NULL。 我尝试了以下方法: PHP: 和: PHP: 警报只是检查一切还好… 是的,通常的字符串被正确地回显了:-) 问题答案: 您在第一个代码中出错的地方是

  • 问题内容: 我有一个php表单,该表单具有已知的列数(例如,顶部直径,底部直径,织物,颜色,数量),但是行数未知,因为用户可以根据需要添加行。 我发现了如何采用每个字段(列)并将其放入各自的数组中。 因此,我最终在HTML中得到的是: 我现在想做的是将所有行和列都放入多维数组,然后将其内容通过电子邮件发送给客户端(最好在格式良好的表中)。我还无法真正理解如何将所有这些输入和选择组合到一个不错的数组

  • 本文向大家介绍PHP如何通过表单直接提交大文件详解,包括了PHP如何通过表单直接提交大文件详解的使用技巧和注意事项,需要的朋友参考一下 前言 我想通过表单直接提交大文件,django 那边我就是这么干的。而对于 php 来说,我认为尽管可以设置最大上传的大小,但最大也无法超过内存大小,因为它无法把文件内容都放到 php://input 里面。直到我试了一下。 下面话不多说了,来一起看看详细的介绍吧

  • 本文向大家介绍JavaScript处理解析JSON数据过程详解,包括了JavaScript处理解析JSON数据过程详解的使用技巧和注意事项,需要的朋友参考一下 JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。 JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包

  • 本文向大家介绍vue.js前后端数据交互之提交数据操作详解,包括了vue.js前后端数据交互之提交数据操作详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了vue.js前后端数据交互之提交数据操作。分享给大家供大家参考,具体如下: 前端小白刚开始做页面的时候,我们的前端页面中经常会用到表单,所以学会提交表单也是一个基本技能,其实用ajax就能实现,但他的原始语法有点。。。额 。。。复杂,

  • 问题内容: 我的python级别是新手。我从未写过网络抓取工具或搜寻器。我已经编写了python代码以连接到api并提取所需的数据。但是对于某些提取的数据,我想获得作者的性别。我找到了该网站,但缺点是没有可用的api。我想知道如何编写python将数据提交到页面中的表单并提取返回数据。如果我能对此提供一些指导,那将是一个很大的帮助。 这是dom的形式: 结果页dom: 问题答案: 无需使用机械化,