最近在學習AFNetwork,很是好的網絡框架,能節省不少時間。不過請求網絡數據時報錯1016,3840.html
這兩個錯誤網上解決方法不少,http://blog.csdn.net/huifeidexin_1/article/details/38844535,這篇博客的解決方法很是好。也確實起了效果,不過接下來問題來了。ios
好比我要實現最容易的登陸功能,用http協議,我把帳號密碼傳給服務器,若是驗證成功,它傳個1給我就好了。web
+(BOOL)getLoginByUser:(NSString *)username andPass:(NSString *)password { AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.requestSerializer = [AFHTTPRequestSerializer serializer]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; NSDictionary *dict = @{@"nickName":username,@"password":password}; [manager GET:url parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) { NSData *doubi = responseObject; NSString *shabi = [[NSString alloc]initWithData:doubi encoding:NSUTF8StringEncoding]; NSLog(@"%@",shabi); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; return YES; }
由於加了"text/html",因此傳過來的是一個html頁面,1在body裏。即...<body>1</body>...算法
可是我只要1就好了,若是本身在寫算法把1提取出來就太詭異了,並不可行。json
後來才發現是我一開始就理解有問題。上面的方法處理的就是服務器傳"text/html"的解決方法。用於爬蟲或者web直接顯示頁面等狀況。服務器
而我要的就是json數據網絡
{"result": "1"}框架
這也正符合了AFNetwork默認支持的類型,其實ios開發不怎麼用到"text/html"類型。大部分狀況下是json,因此這也是AFNetwork默認支持的。ide
這又回到了剛開始的時候,報了1016錯誤。學習
其實錯誤是服務器的緣由,服務器要指定格式,http response的content-type。它要設置爲json,那麼就不會報1016錯誤了。
+(BOOL)getLoginByUser:(NSString *)username andPass:(NSString *)password { AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; NSDictionary *dict = @{@"nickName":username,@"password":password}; [manager GET:url parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) { NSString *responseValue = [responseObject objectForKey:@"result"]; NSLog(@"%@",responseValue); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; return YES; }
這個輸出結果就是1。
因此遇到了錯誤仍是要多想一想,即然本身要的就是json數據,幹嗎還要add"text/html",應該要想到實際上是服務端的問題。