2014-03-05 43 views
0

有沒有辦法將轉義代碼轉換回它們在javascript中表示的字符? 我傳遞一個列表到JavaScript文件,當我看源,而不是此Unencode javascript中的列表

['/path/to/job/a', '/path/to/job/b', etc] 

我看到這個

['/path/to/job/a', '/path/to/job/b', etc] 

我需要實際的單引號本身爲一個jquery自動完成通話,那麼有沒有辦法轉回來?我傳遞的列表中的javascript從一個python /瓶後端

return render_template('main_page.html', job_names = id_by_job.keys()) 

所以在JavaScript文件,我做這樣的事情

$("#job_names").autocomplete({source : {{job_names}}}); 
+0

您需要告訴模板引擎不要輸出。 – SLaks

+0

該怎麼做?我正在使用燒瓶 – Zack

+0

可能重複的[禁用自動燒瓶瓶頸](http://stackoverflow.com/questions/14592554/disabling-autoescape-in​​-flask) – SLaks

回答

-2

一個巧妙的方法是使用臨時選項:

var o=new Option(); 
o.innerHTML="'/path/to/job/a', '/path/to/job/b', etc" 
alert(o.innerHTML); // shows: "'/path/to/job/a', '/path/to/job/b', etc" 

你也可以使用一個RegExp有回調函數替換:

"'/path/to/job/a', '/path/to/job/b', etc".replace(/&#(\d+);/g, 
    function(j,a){ 
    return String.fromCharCode(a) 
    }); // == "'/path/to/job/a', '/path/to/job/b', etc" 

編輯: 我意識到你可能要處理數組和[] .MAP()可以很容易地在上面應用到陣列:

['/path/to/job/a', '/path/to/job/b'] 
.map(function(a){ return a.replace(/&#(\d+);/g, function(j,a){ 
     return String.fromCharCode(a) 
    }); 
}); // == ["/path/to/job/a", "/path/to/job/b"] 
+0

我做了完全按照你寫的,仍然自動完成是不是加工。你知道一種在IE上調試的方法嗎? – Zack

+0

ie8 +內置了[F12]調試器。也許你需要去掉'正則表達式會將它們留在後面,但如果不想與自身匹配(在RegExp完成後不需要有效的字符串),簡單的.slice(1,-1)將刪除它們。 。 – dandavis

0

值插值到模板總是逃過安全納入;其中包括用HTML實體替換引號。

你想在這裏轉換您的列表,以JSON而不是使用tojson filter,並標記結果作爲安全:

$("#job_names").autocomplete({source : {{ job_names|tojson_safe }}}); 

JSON是JavaScript的一個子集;結果直接可讀爲JavaScript,保證能夠正確轉義。