Я в основном пытаюсь удалить элемент в mongodb. Но я просто не могу передать идентификатор в URL в вызове ajax. Вот мой код:

$(".delete-item").on('click', function(e, id) {
              var deleteName = $('p.nameLink').text();

// Get ID first

             $.ajax({
                type: "GET",
                url: "/items",
                dataType: 'json',
            })
            .done(function(result) { 

            // searches mongodb for the clicked name and saves the result in the var     
             var newResult = $.grep(result, function(e){ return e.name === deleteName; });


              var id = newResult[0]._id;
            })
            .fail(function (jqXHR, error, errorThrown) {
                console.log(jqXHR);
                console.log(error);
                console.log(errorThrown);
            });

// Then delete

            console.log("ID to DELETE:", id);  // I can see id

            function itemDelete(id) {

             $.ajax({
                type: 'DELETE',
                url: '/items/' + id,
                dataType: 'json',
            })
            .done(function(result) {

           console.log("ID to DELETE:", id); // Can't see the id

            })
            .fail(function (jqXHR, error, errorThrown) {
                console.log(jqXHR);
                console.log(error);
                console.log(errorThrown);
            });

            }

            itemDelete(id); // pass the id to the function 
         });

Я только учусь в данный момент, так что я могу поступить неправильно. Если кто-нибудь может мне помочь, я был бы признателен.

Сообщение об ошибке:

УДАЛИТЬ https://www.someplace.com/items/undefined 500 (внутренняя ошибка сервера)

1
marcusk7 8 Янв 2017 в 22:19

4 ответа

Лучший ответ

Поскольку вызовы ajax являются асинхронными, вы должны вызывать itemDelete (id) из первого обратного вызова .done . Попробуй переехать

itemDelete(id);

Сразу после

var id = newResult[0]._id;

Таким образом, вы будете выполнять второй вызов ajax только после того, как завершится первый, и будет определена переменная id .

После изменения ваш код должен выглядеть так:

$(".delete-item").on('click', function(e, id) {
    var deleteName = $('p.nameLink').text();

    $.ajax({
        type: "GET",
        url: "/items",
        dataType: 'json',
    })
    .done(function(result) { 
        var newResult = $.grep(result, function(e){ 
            return e.name === deleteName; 
        });

        var id = newResult[0]._id;
        itemDelete(id);
    })
    .fail(function (jqXHR, error, errorThrown) {
        console.log(jqXHR);
        console.log(error);
        console.log(errorThrown);
    });

    function itemDelete(id) {
        $.ajax({
            type: 'DELETE',
            url: '/items/' + id,
                dataType: 'json',
            })
            .done(function(result) {


            })
            .fail(function (jqXHR, error, errorThrown) {
                console.log(jqXHR);
                console.log(error);
                console.log(errorThrown);
        });
    }
 });
1
MazzCris 8 Янв 2017 в 19:40

undefined в https://www.someplace.com/items/undefined предполагает, что идентификатор не определен. Обратите внимание, что запросы get и delete выполняются асинхронно, поэтому не обязательно задавать id при выполнении запроса на удаление, поскольку это зависит от того, когда запрос завершится. Другими словами, попробуйте удалить после того, как вы получите идентификатор. Это потребует от вас выполнения запроса DELETE при успешном обратном вызове запроса GET.

0
Max Sindwani 8 Янв 2017 в 19:30

Этот должен работать для вас.

$ (". delete-item"). on ('click', function (e, id) {var deleteName = $ ('p.nameLink'). text ();

// Получить идентификатор первым

         $.ajax({
            type: "GET",
            url: "/items",
            dataType: 'json',
        })
        .done(function(result) { 

        // searches mongodb for the clicked name and saves the result in the var     
         var newResult = $.grep(result, function(e){ return e.name === deleteName; });


          var id = newResult[0]._id;
          itemDelete(id); // pass the id to the function 
        })
        .fail(function (jqXHR, error, errorThrown) {
            console.log(jqXHR);
            console.log(error);
            console.log(errorThrown);
        });



        console.log("ID to DELETE:", id);  // I can see id

        function itemDelete(id) {

         $.ajax({
            type: 'DELETE',
            url: '/items/' + id,
            dataType: 'json',
        })
        .done(function(result) {

       console.log("ID to DELETE:", id); // Can't see the id

        })
        .fail(function (jqXHR, error, errorThrown) {
            console.log(jqXHR);
            console.log(error);
            console.log(errorThrown);
        });

        }


     });

Спасибо

1
user3775217 8 Янв 2017 в 19:30

Примерьте вот это

 $.ajax({
            type: 'get',
            dataType : 'html',
            url: 'your_url',
            data:{variablname:id,type:'DELETE'}
            dataType: 'json',
        })

На вашей странице URL или в действии получите значение, поскольку его тип - get, поэтому тип данных будет GET.

 if(isset($_GET['variablename'],$_GET['type'])){
     if($_GET['type']=='DELETE')
       delete record from database where id= $_GET['variablename']
}

Я надеюсь, что это поможет вам Спасибо

0
Dani 8 Янв 2017 в 19:39