摘要:實(shí)際的請(qǐng)求沒(méi)有問(wèn)題,它得到了一個(gè)返回值,發(fā)生問(wèn)題的關(guān)鍵在于。下面是一些我所看見(jiàn)的錯(cuò)誤的提示解決方案首先要做是先把返回值打印出來(lái)。同時(shí)可以通過(guò)的查看請(qǐng)求的返回值。
Unhandled Rejection (SyntaxError): Unexpected token < in JSON at position 01.引起的原因當(dāng)你發(fā)送一個(gè)HTTP請(qǐng)求,可能是用Fetch或者其他的Ajax庫(kù),可能會(huì)出現(xiàn)這個(gè)錯(cuò)誤提示,或者相似的錯(cuò)誤。
接下來(lái)我將解釋這是由什么引起的,我們應(yīng)該怎樣解決這些問(wèn)題
這些錯(cuò)誤發(fā)生在當(dāng)你向服務(wù)器發(fā)送請(qǐng)求,返回值不是JSON而用JSON的方法解析的時(shí)候,發(fā)生這種情況的代碼可能是這樣的。
fetch("/users").then(res => res.json())
實(shí)際的請(qǐng)求沒(méi)有問(wèn)題,它得到了一個(gè)返回值,發(fā)生問(wèn)題的關(guān)鍵在于res.json()。
2. JSON.parse用另一種方法JSON.parse來(lái)解析Json的, 代碼可能是這樣的
JSON.parse(`不是Json的字符串`);
JSON.parse()本質(zhì)上是和res.json()一樣的,所以它們發(fā)生錯(cuò)誤的情況是相同的。
3. 無(wú)效的JSONJSON應(yīng)該以有效的JSON值開(kāi)始 —— 一個(gè)object, array, string, number, 或者是
false/true/null。以<開(kāi)始的返回值會(huì)有Unexpected token <這樣的提示。
<這個(gè)符號(hào)意味著返回值是HTML而不是JSON。
引起這個(gè)錯(cuò)誤的根源是服務(wù)端返回的是HTML或者其他不是Json的字符串。
為什么會(huì)這樣呢?
“Unexpected token o in JSON at position 1” 或者其他變量。
錯(cuò)誤的提示一些差別會(huì)隨著服務(wù)器返回的不同而不同
它所提示的符號(hào)或者位置可能不同,但是引起它的原因是相同的: 你的代碼所有解析的Json不是真的有效的Json。
下面是一些我所看見(jiàn)的錯(cuò)誤的提示:
Unexpected token < in JSON at position 1
Unexpected token p in JSON at position 0
Unexpected token d in JSON at position 0
4.解決方案With fetch, you can use res.text() instead of res.json() to get the text string itself. Alter your code to read something like this, and check the console to see what’s causing the problem:
首先要做是先把返回值打印出來(lái)。如果用fetch,可以用res.text()代替res.json()來(lái)獲得字符串。把你的代碼轉(zhuǎn)換成如下這樣,并且通過(guò)打印出來(lái)的內(nèi)容查看哪里出問(wèn)題了。
fetch("/users") // .then(res => res.json()) // comment this out for now .then(res => res.text()) // convert to plain text .then(text => console.log(text)) // then log it out
注意像res.json()和res.text()這樣的方法是異步的。所以不能直接把它們的返回值打印出來(lái),這就是console.log必須在.then的括號(hào)里面的原因。
5. 是因?yàn)榉?wù)器的原因嗎?服務(wù)器有好幾種原因返回HTML而不是JSON:
請(qǐng)求的url不存在,服務(wù)器以HTML的方式返回404頁(yè)面。你可能在請(qǐng)求時(shí)代碼寫(xiě)錯(cuò)(像把/user寫(xiě)成了/users),或者服務(wù)端的代碼的錯(cuò)誤。
當(dāng)添加了新的路由時(shí),服務(wù)器需要重啟。比如你在用Express寫(xiě)的服務(wù)器時(shí),剛剛新加了一個(gè)app.get("/users", ...)路由,但是沒(méi)有重啟,服務(wù)器就不會(huì)對(duì)新的路由地址有反應(yīng)。
客戶(hù)端的代理沒(méi)有設(shè)置: 如果在使用像Create React App的Webpack dev server時(shí),你可以設(shè)置一個(gè)指向后端服務(wù)器的代理。
API的根url是/,如果你在通過(guò)Webpack 或Create React App使用代理,要確認(rèn)你的API路由不在根的層級(jí)/。這樣會(huì)時(shí)代理服務(wù)器混淆,你將得到一個(gè)HTML而不是你的API請(qǐng)求的返回。你可以在如有前面加個(gè)前綴像/api/。
同時(shí)可以通過(guò)devtools的network查看請(qǐng)求的返回值。
是不是404頁(yè)面?(可能是缺少該地址或者代碼輸入錯(cuò)誤)。這是不是index.html的頁(yè)面?(可能是缺少地址或者代理配置錯(cuò)誤)
如果一切看起來(lái)沒(méi)問(wèn)題(新加的地址,服務(wù)端沒(méi)有重啟),那就重啟前端和后端服務(wù)器,看看是不是問(wèn)題解決了
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/100501.html
摘要:可是這次又碰到了,所以這次必須要弄明白原因。將第一個(gè)字符理解為數(shù)組的開(kāi)始,第二字符不知道怎么處理所以就拋出了上面的錯(cuò)誤信息。資源倉(cāng)庫(kù)集合我的博客地址如果您對(duì)我的博客內(nèi)容有疑惑或質(zhì)疑的地方,請(qǐng)?jiān)谙路皆u(píng)論區(qū)留言,或郵件給我,共同學(xué)習(xí)進(jìn)步。 歡迎訪問(wèn)我的個(gè)人博客:http://www.xiaolongwu.cn 寫(xiě)在前面的話 這個(gè)問(wèn)題在之前做項(xiàng)目時(shí)碰到過(guò)一次,當(dāng)時(shí)按照網(wǎng)上的做法,去掉JSON...
摘要:?jiǎn)栴}背景使用模擬實(shí)現(xiàn)文檔,頁(yè)面和的語(yǔ)法差異遇到問(wèn)題。文檔中的效果如下分析問(wèn)題報(bào)錯(cuò)信息寫(xiě)的很明確,,是不被期望的。遇到問(wèn)題時(shí),解決思路可以考慮下轉(zhuǎn)義碼標(biāo)簽。 問(wèn)題背景 使用hexo+css模擬實(shí)現(xiàn)weex文檔,頁(yè)面Weex 和 Vue 2.x 的語(yǔ)法差異遇到問(wèn)題。 問(wèn)題描述 新建頁(yè)面,copy進(jìn)去內(nèi)容,hexo server運(yùn)行,控制臺(tái)報(bào)錯(cuò): FATAL Somethings wrong...
摘要:表示錯(cuò)誤沒(méi)有被語(yǔ)句捕獲,是錯(cuò)誤的名字。如何修復(fù)錯(cuò)誤確保方法名正確。這個(gè)錯(cuò)誤的行號(hào)將指出正確的位置。相關(guān)錯(cuò)誤代碼調(diào)用的方法在當(dāng)前狀態(tài)無(wú)法調(diào)用。通常由引起,在方法準(zhǔn)備完畢之前調(diào)用它會(huì)引起錯(cuò)誤。原文翻譯出處涂鴉碼農(nóng)錯(cuò)誤以及如何修復(fù) (看到一篇調(diào)試JS很有用的文章,收藏一下) JavaScript 調(diào)試是一場(chǎng)噩夢(mèng):首先給出的錯(cuò)誤非常難以理解,其次給出的行號(hào)不總有幫助。有個(gè)查找錯(cuò)誤含義,及修復(fù)...
摘要:來(lái)聊一聊每一種錯(cuò)誤類(lèi)型的使用和出錯(cuò)的場(chǎng)景。不屬于有效類(lèi)型。例如拋出錯(cuò)誤自定義錯(cuò)誤類(lèi)型有時(shí)候希望自定義錯(cuò)誤類(lèi)型,需要自定義一個(gè)構(gòu)造函數(shù),然后讓原型繼承繼承即可。例如以下調(diào)用錯(cuò)誤信息為以上為拋錯(cuò)的構(gòu)造函數(shù)的總結(jié),如有誤之處歡迎扶正。 在寫(xiě)javascript的時(shí)候,調(diào)試錯(cuò)誤必不可少,除了能夠在瀏覽器中打印出來(lái)錯(cuò)誤外,常常還需要知道錯(cuò)誤的類(lèi)型是什么,以便對(duì)癥下藥的糾錯(cuò);也有時(shí)候,在自己封裝的...
摘要:錯(cuò)誤編號(hào)內(nèi)容注釋非比原標(biāo)準(zhǔn)錯(cuò)誤請(qǐng)求超時(shí)非法的請(qǐng)求體為網(wǎng)絡(luò)錯(cuò)誤編號(hào)內(nèi)容注釋區(qū)塊鏈網(wǎng)絡(luò)類(lèi)型不匹配是簽名相關(guān)的錯(cuò)誤編號(hào)內(nèi)容注釋需要簽名的個(gè)數(shù)超過(guò)實(shí)際需求簽名的個(gè)數(shù)簽名格式錯(cuò)誤缺少主公鑰主公鑰重復(fù)為交易相關(guān)的錯(cuò)誤構(gòu)建交易錯(cuò)誤編號(hào)內(nèi)容注釋資產(chǎn)余額不 0XX API錯(cuò)誤 編號(hào) 內(nèi)容 注釋 BTM000 Bytom API Error 非比原標(biāo)準(zhǔn)錯(cuò)誤 BTM001 Request t...
閱讀 1389·2021-09-22 10:02
閱讀 1901·2021-09-08 09:35
閱讀 4061·2021-08-12 13:29
閱讀 2608·2019-08-30 15:55
閱讀 2265·2019-08-30 15:53
閱讀 2301·2019-08-29 17:13
閱讀 2762·2019-08-29 16:31
閱讀 2955·2019-08-29 12:24