我基本上是想删除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(内部服务器错误)
答案 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']
}
我希望它能帮到你谢谢