#javascript #php #jquery #html #arrays
#javascript #php #jquery #HTML #массивы
Вопрос:
У меня проблема с удалением объекта из моего файла json:
{
"data": [{
"index": "1",
"part": "15",
"dueDate": "2019-03-19"
}]
}, {
"data": [{
"index": "2",
"part": "22",
"dueDate": "2019-03-19"
}]
},
@редактировать
Я добавляю код javascript. Функция getTasks отображала этот json-файл на html-сайте. Итак, возможно, здесь мне следует внести изменения.
var todos = new Array();
var todo_index = 0;
window.onload = init;
function init() {
var submitButton = document.getElementById("submit");
submitButton.onclick = getFormData;
getTodoData();
}
function getTodoData() {
function request(method, url, data=null) {
return new Promise((resolve, reject)=> {
const xhr = new XMLHttpRequest;
xhr.timeout = 2000;
//xhr.responseType = 'json';
xhr.onreadystatechange = (e) => {
if(xhr.readyState === 4){
xhr.status === 200 ? resolve(xhr.response) : reject(xhr.status)
}
}
xhr.ontimeout = () => reject('timeout');
xhr.open(method, url, true);
if(method.toString().toLowerCase() === 'get') {
xhr.send(data)
} else {
xhr.setRequestHeader('Accept','application/json');
xhr.setRequestHeader('Content-type', 'application/json');
xhr.send(data)
}
})
}
async function getTasks(){
const task = await request('GET', '/WebService/todo.json');
document.getElementById("todoList").innerHTML=task
}
getTasks()
}
function parseTodoItems(todoJSON) {
if (todoJSON == null || todoJSON.trim() == "") {
return;
}
var todoArray = JSON.parse(todoJSON);
if (todoArray.length == 0) {
console.log("Error: Array is empty!");
return;
}
for (var i = 0; i < todoArray.length; i ) {
var todoItem = todoArray[i];
todos.push(todoItem);
}
}
function checkInputText(value, msg) {
if (value == null || value == "") {
alert(msg);
return true;
}
return false;
}
function Todo(index, part) {
this.index = index;
this.part = part;
}
function addTodosToPage() {
var table = document.getElementById("todoList");
var tr = document.createElement("tr");
var index = document.getElementById('index').value;
var part = document.getElementById('part').value;
tr.innerHTML = "<td>" index "</td><td>" part "</td>";
table.appendChild(tr);
todo_index ;
tr.id = "todo-" todo_index;
var index = document.getElementById('index').value;
var part = document.getElementById('part').value;
tr.innerHTML = "
<td><input name='select-row' type='checkbox' value='" todo_index "'></td>
<td>" index "</td>
<td>" part "</td>
<td><button onclick='removeTodo(" todo_index ");'>x</button></td>";
table.appendChild(tr);
}
function getFormData() {
var index = document.getElementById("index").value;
var part = document.getElementById("part").value;
console.log("Index: " index " part: " part);
var todoItem = new Todo(index, part);
todos.push(todoItem);
addTodosToPage(todoItem);
saveTodoData();
}
function checkInputText(value, msg) {
if (value == null || value == "") {
alert(msg);
return true;
}
return false;
}
function saveTodoData() {
var todoJSON = JSON.stringify(todos);
var request = new XMLHttpRequest();
var URL = "save.php?data=" encodeURI(todoJSON);
request.open("GET", URL);
request.setRequestHeader("Content-Type",
"text/plain;charset=UTF-8");
request.send();
}
function removeTodo(index) {
var row = document.getElementById('todo-' index);
if (row) {
row.parentNode.removeChild(row);
}
todo_index--;
}
function toggleSelection(checkbox) {
var rowsToSelect = document.querySelectorAll('input[name=select-row]');
for (var i = 0; i < rowsToSelect.length; i ) {
rowsToSelect[i].checked = checkbox.checked;
}
}
function removeSelectedTodos() {
var rowsToRemove = document.querySelectorAll('input[name=select-row]:checked');
for (var i = 0; i < rowsToRemove.length; i ) {
removeTodo(rowsToRemove[i].value);
}
}
function setselection(){
var project = document.getElementById('todoList').value;
document.cookie = 'todotabel=' project;
}
function getselection(){
var name = 'todotabela=';
var x = document.cookie.split(';');
var i = 0, c = 0;
for(i = 0; i < x.length; i ) {
c = x[i];
while (c.charAt(0) === ' ') {
c = c.substring(1);
}
if (c.indexOf(selectedProject) === 0) {
return c.substring(name.length, c.length);
}
} return '';
}
function remove() {
var arr = [];
var obj = {
'index': document.getElementById("index").value
};
for (var i = arr.length - 1; i >= 0; i--) {
if (arr[i]['index'] === obj['index']) {
arr.splice(i, 1);
}
}
localStorage.removeItem("user", JSON.stringify(arr));
}
function appendLocalStorage(keys, data) {
var old = localStorage.getItem(index);
if (old === null) old = "";
localStorage.setItem(index, old data);
}
function addTo() {
var arr = [];
var obj = {
'index': document.getElementById("index").value,
'part': document.getElementById("part").value,
};
if (!arr.some(e => e['index'] == obj['index'])) {
arr.push(obj);
} else {
arr[arr.map((e, i) => [i, e]).filter(e => e[1]['index'] == obj['index'])[0][0]] = obj;
}
appendLocalStorage("user", JSON.stringify(arr));
alert(localStorage.getItem("user"));
}
Эти данные сохраняются из входного файла с помощью php и функции javascript
Как я могу удалить один из объектов в массиве? И т.д. Я хочу удалить объект с индексом: 2, и мне нужно удалить это с помощью кнопки в html. Как я могу это сделать?
Мой php-файл:
$unsafe_json = json_decode($_GET["data"], true);
if (!is_array($unsafe_json)) {
die('Error save');
}
$safe_json = ['data' => []];
$values = ['index', 'part', 'dueDate'];
foreach ($unsafe_json as $unsafe_todo) {
$safe_todo = [];
foreach ($values as $value) {
if (isset($unsafe_todo[$value]) amp;amp; is_string($unsafe_todo[$value])) {
$safe_todo[$value] = filter_var($unsafe_todo[$value], FILTER_SANITIZE_STRING);
} else {
$safe_todo[$value] = false;
}
}
* /
$safe_json['data'][] = $safe_todo;
}
$file = fopen("todo.json", "a");
fwrite($file, '' . json_encode($safe_json) . ',');
fclose($file);
$data = file_get_contents('todo.json');
Комментарии:
1. Ваш первый фрагмент, содержащий json, кажется недопустимым. В нем отсутствует самый внешний
[]
2. @Taplar не могли бы вы сказать мне, как я могу это исправить?
3. Откуда вы берете json?
4. @Andreas Я создал его, введя данные для ввода в html, а затем создал в javascript.
5. @Tom на каком языке вы хотите это сделать php или js?
Ответ №1:
я думаю, что вы ищете
unset($OBJECT['INDEX']);
вы можете выполнить итерацию по вашему JSON, и когда вы соответствуете своему условию, вы можете вызвать метод PHP unset () для удаления индекса
* Обновите пример кода для удаления с помощью php
$json_decoded = json_decode($json_encoded, true);
foreach ($json_decoded as $i => $object)
if ($object['data']['index'] == 2)
unset($json_decoded[$i]);
Комментарии:
1. Да, я думаю, это могло бы помочь. Не могли бы вы, пожалуйста, показать мне, как я могу реализовать это в своем коде?
2. я обновил свой ответ, надеюсь, это то, что вы хотите, вы можете изменить имена переменных, чтобы они соответствовали вашим, и это должно сработать
3. Спасибо, но я должен иметь возможность удалять любой индекс, у меня есть кнопка и флажок. У меня есть удаление на html-сайте, но мне нужно одновременно удалить из файла json