2015-10-26 26 views
-2

我在寫一個使用Flask的小應用程序。我的服務器代碼如下:TypeError:未定義不是JSON可序列化

@app.route('/loadNext') 
def loadNext(): 
    tmp = "Okay" 
    return render_template("next.html",message = {"date_to":"from","date_from":tmp,"error_stat":[30,400,21,45],"mac_length":[7,7,7,7],"mac":[["1.1.1.1","1.2.1.2","3.2.1.1","3.1.4.5","1.3.2.4","5.5.4.3","2.1.6.7"],              ["6.1.1.1","1.2.3.2","3.2.1.1","3.2.4.5","1.3.2.4","5.5.4.3","2.1.6.7"],              ["9.1.1.1","4.2.1.2","3.2.1.1","3.7.4.5","1.3.2.4","5.5.4.3","2.1.6.7"],              ["10.1.1.1","1.2.1.2","3.2.1.1","3.6.4.5","1.3.2.4","5.5.4.3","2.8.6.7"]]}) 

在我的javascript代碼,我使用一個for循環和訪問值如下:

$("#loadtable").ready(function(){ 
    alert("Inside function"); 
    for (i = 0; i < 7; i++) { 
     var tmp = {{message.mac[0][i]|tojson|safe}}; 
     alert(tmp); 
    }   
}); 

但我收到此錯誤:

TypeError: Undefined is not JSON serializable

我想我不應該在這裏使用循環變量。但是它的解決方案是什麼?我哪裏錯了?

+0

你還在使用'var tmp = {{message.mac [0] [i]}};'?此問題已在[上一個問題]中解決(http://stackoverflow.com/questions/33344773/unexpected-number-error-javascript)。 –

+0

@RoryMcCrossan不,我改變了代碼。但它仍然不起作用。 – sklearning

回答

2

Jinja不理解JavaScript。 Jinja在服務器上呈現,然後在客戶端上執行JavaScript。你不能從一個JavaScript循環中取出一個變量i並在Jinja表達式中使用它。相反,將一個JavaScript變量設置爲Jinja表達式,然後在循環中使用該變量。

var message = {{ message|tojson }}; 
for (var i = 0; i < message['mac'][0].length; i++) { 
    var item = message['mac'][0][i]; 
} 

如果您只是想輸出數據,則不需要使用JavaScript。只需在Jinja中直接渲染即可。

<ul>{% for item in message.mac[0] %} 
    <li>{{ item }}</li> 
{% endfor %}</ul> 
相關問題