開始一個新的項目的時候,可能會遇到不同的后臺.不同的后臺也導致傳參的方式不一樣.很多時候接口調(diào)用不成功就是因為傳參方式變化.(其他404,500等錯誤我們不做討論,主要說明因為傳參不對導致失敗的現(xiàn)象)我參與了很多項目的開發(fā).當然后臺也不一樣.每次第一次調(diào)用接口失敗的時候,就一萬個草泥馬奔騰而過.因為很多時候跟咱們最常見的傳參方式不一樣.溝通起來麻煩.不知道的后臺還以為你連個接口都不會調(diào)用.(不過臉皮要厚,調(diào)不通就得麻煩他.告訴自己,接口調(diào)用失敗就是他的問題,哈哈) ? 不論是誰的問題,解決問題是關(guān)鍵.解決了第一次調(diào)用,封裝好了就好用了. ?我就把我遇到的幾種調(diào)用說說
1.常見傳參方式 ? 傳入字典.相信大家對這個是特別熟悉了
NSDictionary *dataDic = @{@"call_name":@"sp_tab_user_register",@"data":strDic};
直接傳入AFN.的parameters ? 這個不多講.
2. 后臺告訴你說你傳參要傳這種格式 ?http://www.yiwen.cn/Y/ywz2/sp_yw_back_interface?inParameter={"call_name": "*****","data":*****}
下面是傳參說明:
AFN傳參的時候就是傳字典,你傳其他的也沒有用.分析一下URL. ? 問號? 后面是inParameter.說明這個是個key. ?至于{"call_name": "*****","data":*****} ?很明顯是一串字符串.也就是說我們需要創(chuàng)建一個字典,然后轉(zhuǎn)換成字符串.并作為inParameter的value.NSDictionary *dic=@{
@"call_name":@"xxxxx",
@"data":@"xxxx"}
NSString* jsonStr = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:paraM options:0 error:nil] encoding:NSUTF8StringEncoding];
最終傳入的參數(shù):
NSDictionary *para = @{@"inParameter":jsonStr};
正確調(diào)用方式,代碼截圖:
第三種:后臺告訴你要傳入json數(shù)據(jù).你直接使用常用的方式就會調(diào)用失敗.我暫時沒有利用AFN解決這個問題.后續(xù)再來解決更新文章.這里我推薦一個方法.這個json數(shù)據(jù)需要你傳入在HTTPBody里面?zhèn)鬟^去,這樣就可以調(diào)用成功.親測有效.
正確調(diào)用方式,代碼截圖:
另外講一下.最近調(diào)用接口的時候遇到了一個問題就是在網(wǎng)頁上或者https post請求工具上都能正常請求獲取數(shù)據(jù),但是在項目里面用AFN調(diào)用就是回調(diào)失敗.這里報的錯誤是?-1016
在進行網(wǎng)絡(luò)請求時出現(xiàn)-1016 是因為只支持text/json适肠,application/json刁笙,text/javascript你可以添加text/html或其他 ?這個地方報錯的時候會告訴你缺少何種種類,仔細看看報錯的信息.我在這里就是缺少了text/plain. ?加上之后就完美解決了.text/plain 這個在錯誤信息里面也是出現(xiàn)了的.
instance.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html",@"text/plain",nil];
有問題可直接咨詢我,歡迎在評論區(qū)指出不足,或者優(yōu)化建議 ? ?+QQ648731281 ?微信+17723566468 ?備注直接寫簡書 ?