行いたい事
Pythonを使用してWebアプリケーションの制作。
その際にAjaxを利用してDBから取得したデータを表示し、
HTML側の入力欄で入力された文字が入っているデータだけを画面を遷移させずに表示する(絞り込み機能)
困っている事
: や . など文字が入っている際にJavaScript側でエラーを吐いてしまう。
恐らく: や . などの文字の前にバックスラッシュでエスケープを行えばエラーは出なくなると思うのですが、if文などが長く続いてしまいそうなため もっといい方法は無いか困っています。
python
1# 日本語が文字化けしないように、Falseにしておく。 2app.config['JSON_AS_ASCII'] = False 3@app.route('/spec_get') 4def spec_get(): 5 spec_data = db.game_spec_get() 6 7 spec_list = [] 8 for i in range(len(spec_data)): 9 # specに辞書型で格納する。 10 spec = { 11 'id': spec_data[i][0], 12 'name': spec_data[i][6] 13 } 14 spec_list.append(spec) 15 16 # JSONで返す。 17 return jsonify(ResultSet=json.dumps(spec_list))
JavaScript
1function game_spec_get() { 2 3 let list_data = document.getElementById('gTable'); 4 let child_data = list_data.rows.length; 5 6 if (child_data <= 1) { 7 $(document).ajaxSend(function() { 8 $("#overlay").fadeIn(200); 9 }); 10 $.ajax({ 11 type: 'GET', 12 url: '/spec_get', 13 data: '', 14 contentType: 'json', 15 success: function (data) { 16 parsed = JSON.parse(data['ResultSet']); 17 console.log(data['ResultSet']); 18 } 19 20 }).done(function() { 21 setTimeout(function() { 22 $("#overlay").fadeOut(0); 23 },0); 24 let tabObj = document.getElementById('Table'); 25 for (let i in parsed) { 26 // trタグを追加 27 let newRow = tabObj.insertRow(); 28 let newCell = newRow.insertCell(); 29 let newText = document.createTextNode(parsed[i]['name']); 30 newCell.appendChild(newText); 31 newRow.classList.add('title_target'); 32 33 newCell = newRow.insertCell(); 34 newText = document.createTextNode("○"); 35 newCell.appendChild(newText); 36 } 37 } 38 )} 39} 40 41$(function () { 42 gameSearchWord = function(){ 43 let gameSearchText = $(this).val(), // 検索ボックスに入力された値 44 gameTargetText; 45 46 $('.title_target').each(function() { 47 gameTargetText = $(this).text(); 48 49 // 検索対象となるリストに入力された文字列が存在するかどうかを判断 50 if (gameTargetText.indexOf(gameSearchText) != -1) { 51 $(this).removeClass('hidden'); 52 $('#'+gameTargetText).removeClass('hidden'); 53 } else { 54 $(this).addClass('hidden'); 55 $('#'+gameTargetText).addClass('hidden'); 56 } 57 }); 58 }; 59 60 // searchWordの実行 61 $('#game_search').on('input', gameSearchWord); 62 });
Uncaught Error: Syntax error, unrecognized expression: #gamename: gamename (ここのgamenameはゲーム名に:などが含まれている物です。)
回答2件
あなたの回答
tips
プレビュー