Соответствие запроса на удаление объекта json - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь удалить объект json из файла json, когда значения этого объекта отображаются в форме с помощью функции удаления AJAX.Я использую экспресс для генерации маршрута для файла json, как показано ниже:

app.get('/users', (req, res) => {
    var userData = json;
    
    res.send(userData);
        
        }), 
        
app.delete('/users/delete/:id', (req, res) => {
    var key = req.params.id;
    var deletedData = json;
    
    deletedData.splice(key, 1);
    res.send(deletedData);

});

      $(document).on('click', '#delete', function () {
             $.ajax({
                    type: "DELETE"
                    , url: "users/delete/"+data[key]  
                    , datatype: "datatype"
                    , success: function (data) {
                        console.log(data);
       
                        }   
                });
            });

Я знаю, что не объявил данные [ключ], это просто контекст для того, что я хотел бы сделать.Моя проблема заключается в попытке выбрать конкретный объект json, а не просто выбрать первый объект с тем, что у меня сейчас "users / delete / 0", кто-нибудь знает, как это сделать?

EDIT

Я пытаюсь получить «users / delete /: id», специфичный для объекта, который отображается в моей форме в html

                <div class="col-md-5 col-sm-12">
                    <div id="full_details">
                        <ul class="details">
                            <h2>Contact Details</h2> <img src="" alt="Avatar" id="avatar">
                            
                            
                            <li>Name
                                <input type="text" id="name" class="form-control mr-sm-2" disabled>
                            </li>
                            <li>Address
                                <input type="text" id="address" class="form-control mr-sm-2" disabled>
                            </li>
                            <li>Contact Number
                                <input type="text" id="phone" class="form-control mr-sm-2" disabled>
                            </li>
                            <li>Email
                                <input type="text" id="email" class="form-control mr-sm-2" disabled>
                            </li>
                            <li>Postcode
                                <input type="text" id="postcode" class="form-control mr-sm-2" disabled>
                            </li>
                            <li>City
                                <input type="text" id="city" class="form-control mr-sm-2"disabled>
                            </li>
                            <li>Country
                                <input type="text" id="country" class="form-control mr-sm-2" disabled>
                            </li>
                            <div class="row">
                                <div class="col-md-6">
                                    <div id="editbutton">
                                        <p class="btn btn-primary">Edit Details</p>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div id="savebutton">
                                        <p class="btn btn-danger">Save Details</p>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div id="delete">
                                        <p class="btn btn-danger">delete</p>
                                    </div>
                                </div>
                            </div>
                        </ul>
                    </div>
                </div>

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Когда вы заполняете данные в поля, я предполагаю, что у вас будет id этой записи.

сохраните ее в переменной / или вы можете напрямую получить ее из извлеченного объекта(object.id)

Пока я сохраню его в переменной.

Предположим, ниже приведены данные объекта, которые вы вытащили и отобразили:

var obj = {
   id:1,
   name: "Test",
   address:"Test Address"   
}
var objId = obj.id; //I'll use this id in AJAX request.

Затем вызовитеAJAX-запрос.

 $.ajax({
             type: "DELETE"
            , url: "users/delete/"+objId  
            , datatype: "datatype"
            , success: function (data) {
                 console.log(data);

                }   
                });

Узел Js:

app.delete('/users/delete/:id', (req, res) => {
       let deleteId = req.params.id; //Get the id through req.params.id of the object you are going to delete
       let deleteObj = userJson.find(user => user.id == deleteId); // As you have only Id of the object, we want to get the entire object from the array. find() will fetch the object from the array whose id is equal to deleteId and assign it to deleteObj.
       let deleteIndex = userJson.indexOf(deleteObj); //Find the index of the object fetched from the JSON array.
       userJson.splice(deleteIndex,1); // Splice/ remove the object from the JSON Array.
      res.send(deleteObj); // Send the deleted object as response.
});
0 голосов
/ 07 декабря 2018

Данные JSON должны быть доступны в том месте, где вы хотите выполнить операции.Если вы еще не сделали этого вне фрагмента, ваш JSON должен быть указан в файле, в котором находится ваш маршрут экспресс-удаления.

В вашем текущем маршруте delete метод .splice используется толькодоступно для строк и массивов (если вы не определили метод на Object.prototype).

Это пример того, как может выглядеть маршрут delete, если ваши данные JSON были объектом:

let userJSON = require('./users.json');

app.delete('/users/delete/:id', (req, res) => {
    let key = req.params.id;
    if( delete userJSON.key ){
        res.send(`User ${key} deleted`);
    }
}

Оператор delete в операторе if возвращает true, если ключ объекта был успешно удален.В некоторых случаях вы не можете использовать этот оператор, см. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete, чтобы проверить, совместимо ли это с тем, что вы хотите сделать.

Редактировать 1: неправильно понятый вопрос, поэтому здесь правильный deleteметод

let userJSON = require('./users.json');

app.delete('/users/delete/:id', (req, res) => {
    let key = req.params.id;
    for( let i=0; i<userJSON.length; i++){
        if( userJSON[i].id === key ){
            userJSON.splice(i,1);
        }
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...