私はフラスコ、パイソン、ajax、json、javascript、およびチラシを使用しているアプリケーションを持っています。このアプリはcsvファイルを読み込んでjson形式にして、それをajax呼び出しに返します。私の問題はgeojsonが返されていないということです。コンソールでは、コンソールログに5000 NetworkErrorが表示されています。最終的な結果は、リーフレットの地図レイヤーでreturn geojsonを使用することです。もし私がjsonifyを取り除くと、戻り値はうまくいきますが、それはもちろん文字列であり、これはレイヤーでは機能しません。Jsonifyデータがajaxコールに返されない
ご覧のとおり、私はajaxの成功の部分に簡単なアラート(「成功」)があります。これは実行されていません。警告(データ)もありません。 私はFlaskインポートステートメントからjsonifyを持っています。私は、私のreturn文からそれをjsonifyを削除した場合、手にデビッドKnipeの情報を取る - は、ヘルプ
Ajax呼び出し
$.ajax({
type : "POST",
url : '/process',
data: {
chks: chks
}
})
.success(function(data){
alert("success"); // I am doing this just to get see if I get back here. I do not
alert(data);
パイソン/フラスコ
@app.route('/process', methods=['POST'])
def process():
data = request.form['chks']
rawData = csv.reader(open('static/csvfile.csv', 'r'), dialect='excel')
count = sum(1 for row in open('static/csvfile.csv))
template =\
''' \
{"type" : "Feature",
"geometry" : {
"type" : "Point",
"coordinates" : [%s, %s]},
"properties" : {"name" : "%s" }
}%s
'''
output = \
''' \
{"type" : "Feature Collection",
"features" : [
'''
iter = 0
separator = ","
lastrow = ""
for row in rawData:
iter += 1 // this is used to skip the first line of the csv file
if iter >=2:
id = row[0]
lat = row[1]
long = row[2]
if iter != count:
output += template % (row[2], row[1], row[0], separator)
else:
output += template % (row[2], row[1], row[0], lastrow)
output += \
''' \
]}
'''
return jsonify(output)
詳細をありがとう私が期待しているものを返し、私はアラートでリターンを出力することができます。それが動作します、そして私のポイントは私のマップ
上に表示されます - それは私がデータとAjaxの成功にハードコード、それは、このようなリーフレット層のコードにそれを渡すことを取る場合は、この{ "type" : "Feature Collection",
"features" : [
{"type" : "Feature",
"geometry" : {
"type" : "Point",
"coordinates" : [ -86.28, 32.36]},
"properties" : {"name" : "Montgomery"}
},
{ "type" : "Feature",
"geometry" : {
"type" : "Point",
"coordinates" : [ -105.42, 40.30]},
"properties" : {"name" : "Boulder"}
},
]}
のように見えます
...
.success(function(data){
var pointsHC= { "type" : "Feature Collection",
"features" : [
{"type" : "Feature",
"geometry" : {
"type" : "Point",
"coordinates" : [ -86.28, 32.36]},
"properties" : {"name" : "Montgomery"}
},
{ "type" : "Feature",
"geometry" : {
"type" : "Point",
"coordinates" : [ -105.42, 40.30]},
"properties" : {"name" : "Boulder"}
},
]};
// leaflet part
var layer = L.geoJson(pointsHC, {
pointToLayer: function(feature, latlng){
return L.circleMarker(...
変数を使用してデータをハードコードして渡しても動作しない場合、geoJsonオブジェクトが取得され、無効です。私は最終的セミコロンの両方を除去し、除去されていないと、それを試してみました、そして愛は、いずれかの方法
...
.success(function(data){
// leaflet part
var layer = L.geoJson(data, {
pointToLayer: function(feature, latlng){
return L.circleMarker(...
は 'request.form ['chks']'が正しく埋め込まれています – Busturdust
@Busturdust - はい。私がchksを返すようにコードを変更すると、私は期待しているものを得ます。また、私がjsonifyを削除してただの戻り値(出力)を返すと、期待通りの結果が得られますが、文字列として返されます。 –
上記のコードには、私が修正したいくつかのタイプミスがあります。私はそれらをすべて行くことを願っています。セキュリティ上の問題のため、私は自分のコードをコピーできませんでした。それで、タイプミスがそこにあるのです。 –