def map():
if request.method == 'POST':
key = "googleMapAPIkey"
orilist = request.form['from'].split()
deslist = request.form['to'].split()
mode = request.form.get('traffic_mode')
ori = ""
des = ""
for word in orilist:
ori = ori + word + "+"
ori = ori[:-1]
for word in deslist:
des = des + word + "+"
des=des[:-1]
url = "https://maps.googleapis.com/maps/api/directions/json?origin="+ori+
"&destination="+des+"&key="+key
print ori,des,mode,url
r = requests.get(url)
direction1 = r.json()
markerArray = []
print json.dumps(direction1)
return render_template('googlemap.html', direction1=json.dumps(direction1), ori=request.form['from'], des=request.form['to'], mode=mode,method='POST')
else:
print request.method
return render_template('index.html',method='GET')
这是模板脚本
var routes = {{ directions1|tojson }};
var start_point = {{ ori }};
var end_point = {{ des }};
var mode = {{ mode }};
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
center: {lat: 42.880230, lng: -78.878738},
zoom: 8
});
var renderer = new google.maps.DirectionsRenderer();
var request = {
travelMode: mode,
origin: start_point,
destination: end_point
};
renderDirections(map,routes,request)
}
我使用谷歌 api 来获取响应,并尝试将此值传递到客户端。我确定我得到了 JSON 格式的字符串,当我尝试打开网络时,它出现了 "类型错误:未定义不是 JSON 可序列化的">
您正在尝试从尚未定义的变量中获取方向。
没有来自后端的directions1
。试试direction1
.(或将其重命名为render_template()
以便它们匹配(。
最佳做法:复制/粘贴变量名称。即使您输入了拼写错误,您的代码仍然有效。
另外,最好注意错误文本本身:">未定义是......正是这个意思:无论您传递什么而不是 JSON 可序列化对象......未定义。
当您看到此错误时,您首先要做的是:转到render_template()
,双击变量名称以将其选中并复制/粘贴到 js 中。即使它"看起来"相同。