詳解iOS通過(guò)ASIHTTPRequest提交JSON數(shù)據(jù)
先驗(yàn)知識(shí)——什么是ASIHTTPRequest?
使用iOS SDK中的HTTP網(wǎng)絡(luò)請(qǐng)求API,相當(dāng)?shù)膹?fù)雜,調(diào)用很繁瑣,ASIHTTPRequest就是一個(gè)對(duì)CFNetwork API進(jìn)行了封裝,并且使用起來(lái)非常簡(jiǎn)單的一套API,用Objective-C編寫(xiě),可以很好的應(yīng)用在Mac OS X系統(tǒng)和iOS平臺(tái)的應(yīng)用程序中。ASIHTTPRequest適用于基本的HTTP請(qǐng)求,和基于REST的服務(wù)之間的交互。
上傳JSON格式數(shù)據(jù)
首先給出主功能代碼段,然后對(duì)代碼進(jìn)行詳細(xì)解析:
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];
構(gòu)造了一個(gè)最簡(jiǎn)單的字典類型的數(shù)據(jù),因?yàn)樽詉OS 5后提供把NSDictionary轉(zhuǎn)換成JSON格式的API。
第二行if判斷該字典數(shù)據(jù)是否可以被JSON化。
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:user options:NSJSONWritingPrettyPrinted error: &error];
這一句就是把NSDictionary轉(zhuǎn)換成JSON格式的方法,JSON格式的數(shù)據(jù)存儲(chǔ)在NSData類型的變量中。
NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData];
這一句是把NSData轉(zhuǎn)換成NSMutableData,原因是下面我們要利用ASIHTTPRequest發(fā)送JSON數(shù)據(jù)時(shí),其消息體一定要以NSMutableData的格式存儲(chǔ)。
下面一句注視掉的語(yǔ)句
//NSLog(@"Register JSON:%@",[[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding]);
主要作用是記錄剛才JSON格式化的數(shù)據(jù)
下面到了ASIHTTPRequest功能部分:
NSURL *url = [NSURL URLWithString:@"http://xxxx"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
這兩句的主要功能是設(shè)置要與客戶端交互的服務(wù)器端地址。
接下來(lái)兩句:
[request addRequestHeader:@"Content-Type" value:@"application/json; encoding=utf-8"];
[request addRequestHeader:@"Accept" value:@"application/json"];
是設(shè)置HTTP請(qǐng)求信息的頭部信息,從中可以看到內(nèi)容類型是JSON。
接下來(lái)是設(shè)置請(qǐng)求方式(默認(rèn)為GET)和消息體:
[request setRequestMethod:@"POST"];
[request setPostBody:tempJsonData];
一切設(shè)置完畢后開(kāi)啟同步請(qǐng)求:
[request startSynchronous];
最后的一段:
if (!error1) {
NSString *response = [request responseString];
NSLog(@"Rev:%@",response);
}
是打印服務(wù)器返回的響應(yīng)信息。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- IOS json 解析遇到錯(cuò)誤問(wèn)題解決辦法
- 談?wù)刬OS開(kāi)發(fā)之JSON格式數(shù)據(jù)的生成與解析
- 詳解iOS開(kāi)發(fā)中解析JSON中的boolean類型的數(shù)據(jù)遇到的問(wèn)題
- IOS開(kāi)發(fā)之JSON轉(zhuǎn)PLIST實(shí)例詳解
- IOS中Json解析實(shí)例方法詳解(四種方法)
- iOS開(kāi)發(fā)使用JSON解析網(wǎng)絡(luò)數(shù)據(jù)
- iOS中json解析出現(xiàn)的null,nil,NSNumber的解決辦法
- iOS json解析出錯(cuò)的幾種情況總結(jié)
相關(guān)文章
iOS使用WebView生成長(zhǎng)截圖的第3種解決方案
這篇文章主要給大家介紹了關(guān)于iOS使用WebView生成長(zhǎng)截圖的第3種解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
詳解iOS App中調(diào)用AVAudioPlayer播放音頻文件的用法
這篇文章主要介紹了iOS App中調(diào)用AVAudioPlayer播放音頻文件的用法,AVAudioPlayer僅能播放本地文件而不能添加網(wǎng)絡(luò)源,實(shí)例代碼為Objective-C,需要的朋友可以參考下2016-03-03
iOS開(kāi)發(fā)中的ViewController轉(zhuǎn)場(chǎng)切換效果實(shí)現(xiàn)簡(jiǎn)介
這篇文章主要介紹了iOS開(kāi)發(fā)中的ViewController轉(zhuǎn)場(chǎng)切換效果實(shí),主要針對(duì)iOS7以后新加入的API進(jìn)行講解,需要的朋友可以參考下2015-09-09
iOS利用NSMutableAttributedString實(shí)現(xiàn)富文本的方法小結(jié)
這篇文章主要給大家介紹了關(guān)于iOS利用NSMutableAttributedString如何實(shí)現(xiàn)富文本的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05
iOS在固定的label上動(dòng)態(tài)顯示所有文字
這篇文章給大家主要介紹了iOS中如何實(shí)現(xiàn),在固定的label上動(dòng)態(tài)顯示所有文字的方法,文中給出了示例和思路,對(duì)大家的理解很有幫助,感興趣的朋友們下面來(lái)一起看看吧。2016-10-10
IOS 下獲取 rootviewcontroller 的版本不同的問(wèn)題解決辦法
這篇文章主要介紹了IOS 下獲取 rootviewcontroller 的版本不同的問(wèn)題解決辦法的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家遇到這種問(wèn)題可以解決,需要的朋友可以參考下2017-10-10
iOS中Cell的Section展開(kāi)和收起的示例代碼
本篇文章主要介紹了iOS中Cell的Section展開(kāi)和收起的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08

