ajax후에 테이블을 그려야했는데 맨 끝부분에는 관리 컬럼이있고 그래서 삭제가 가능해야했다.
1) 삭제를 누르면 a tag의 onclick function이 호출되어야한다.
2) 언어값, 명칭값, 수정하려는 지역값, 총 세개의 파라미터를 전달해야한다.
그런데
이렇게 문자열이 깨졌음.
해결방법은
var valueString = value.replace(/'/gi, "\\\'");
이렇게 하면 예컨대 St.Jone's 와 같은 문자열이
St.Jone\'s로 바뀐다.
그래서
지역명|St.Jone\'s|코드 로 온전히 전달된다.
'<a href="javascript:void(0);" onclick="deleteName(\'' + keyValueRegionCode + '\');">[ 삭제 ]</a>' + '</td></tr>';
현재의 a 태그는 이렇게 생김. onclick option안에 여러 변수를 전달하려고 하다보니 너무 힘들어서 그냥 하나로 뭉쳤다 ㅜㅜ
$.ajax({
url: "http://localhost:8080/api/v1/regions/" + $('#regionCodeForm').text() + "/names",
type: "GET",
success: function(data) {
const tableData = data.data;
const regionCode = $('#regionCodeForm').text();
// const itemsArray = tableData.map((item) =>
// const key = Object.keys(item)[0];
// return '<tr><td>' + Object.keys(item)[0] + '</td><td>' + Object.values(item) + '</td><td>' + `<a href="javascript:void(0);" onclick=`deleteName(\${Object.keys(item)[0]}, \${Object.values(item)})`>[ 삭제 ]</a>` + '</td></tr>');
const itemsArray = tableData.map(function(item) {
var key = Object.keys(item)[0];
var value = Object.values(item)[0];
var valueStr = JSON.stringify(value);
var valueString = value.replace(/'/gi, "\\\'");
var keyValueRegionCode = key + "|" + valueString + "|" + regionCode;
return '<tr><td>' + key + '</td><td>' + value + '</td><td>' + '<a href="javascript:void(0);" onclick="deleteName(\'' + keyValueRegionCode + '\');">[ 삭제 ]</a>' + '</td></tr>';
});
$('#nameList > tbody').append(itemsArray);
}
})
전달받은 뭉태기 파라미터를 구질구질하게 쪼개는 부분.
a tag안에서 온전히 전달하기가 쉽지 않았다.
function deleteName(keyValueRegionCode) {
var keyValue = keyValueRegionCode.split("|")[0];
var nameValue = keyValueRegionCode.split("|")[1];
var regionCode = keyValueRegionCode.split("|")[2];
$.ajax({
url: "http://localhost:8080/api/v1/regions/" + regionCode + "/names?lang=" + keyValue + "&name=" + encodeURIComponent(nameValue),
method: "DELETE",
success: function() {
alert("삭제되었습니다.");
location.reload();
},
error: function(err) {
console.log(err);
}
});
}