无法在javascript中将变量传递到ajax url

时间:2017-01-08 19:19:40

标签: javascript jquery ajax url

我基本上是想删除mongodb中的一个项目。但我似乎无法将id传递给ajax调用中的url。这是我的代码:

$(".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(内部服务器错误)

4 个答案:

答案 0 :(得分:1)

由于ajax调用是异步的,因此您应该从第一个 .done 回调中调用 itemDelete(id)。 尝试移动

itemDelete(id);

之后

var id = newResult[0]._id;

这样,只有在第一个ajax调用终止后才会执行第二个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 :(得分:1)

这个适合你。

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

//首先获取ID

         $.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);
        });

        }


     });

由于

答案 2 :(得分:0)

undefined中的https://www.someplace.com/items/undefined表示ID未定义。请注意,get和delete请求是异步发生的,因此在发出删除请求时不保证设置id,因为它取决于请求何时完成。换句话说,尝试在之后删除即可获得ID。这将要求您在GET请求的成功回调中发出DELETE请求。

答案 3 :(得分:0)

请尝试这个

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

在您的网址页面或操作中获取值,因为其类型为get,因此数据类型将为GET

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

我希望它能帮到你谢谢