一般而言jq的getJson回調(diào)不執(zhí)行除了請求本身就出錯之外那肯定就是json格式本身有問題了
最近在做一個demo瓜喇,使用python的flask框架進行構(gòu)建瑰抵,route代碼如下:
>run.py
@app.route('/data/getHotWordContent')
def getHotWordContent():
hot_word = request.args.get('hot_word')
return api.getHotWordContent(hot_word=hot_word)
>api.py
from flask import jsonfy
def getHotWordContent(self, hot_word='', start_date='2019-07-31', end_date='2019-08-14'):
wf = Wordfrequency(start_date=start_date, end_date=end_date)
json_data = []
data = wf.findHotWordContent(hot_word=hot_word)
for d in data:
json_data.append({'author': d[0], 'content': d[1]})
return jsonify({'data': json_data})
調(diào)用的js代碼如下
var loadHotWordContent = function (hot_word) {
console.log('Loading hot word information ...')
$.getJSON({
url: pre_url + '/data/getHotWordContent',
data: {'hot_word': hot_word},
function(data) {
console.log('Json data load successfully!')
}
})
}
很詭異的是我在控制臺的network中查看請求已經(jīng)成功,而且使用的是flask本身的jsonfy工具吼鱼,json肯定不會有格式問題劫谅,依然無法調(diào)用回調(diào)函數(shù),經(jīng)過一上午的研究終于發(fā)現(xiàn)了問題粹污。
查找json的官方文檔有
傳入格式有誤的 JSON 字符串可能導(dǎo)致拋出異常段多。例如,下面這些無效的 JSON 字符串:
{test: 1} (test 沒有使用雙引號包裹).
{'test': 1} ('test' 用了單引號而不是雙引號包裹).
"{test: 1}" (test 沒有使用雙引號包裹).
"{'test': 1}" ('test' 用了單引號而不是雙引號包裹).
"'test'" ('test' 用單引號代替雙引號).
".1" (number 必須以數(shù)字開頭; "0.1" 將是有效的).
"undefined" (undefined 不能表示一個 JSON 字符串; 然而null,可以).
"NaN" (NaN 不能表示一個 JSON 字符串; 用Infinity直接表示無限也是不允許的).
在flask中壮吩,如果遇到None值會直接格式化成為NaN從而觸發(fā)這個bug
將None值替換即可解決問題