如何从函数 returns 之前的 AJAX 调用中获取结果?
How to get result from AJAX call before function returns?
我的页面有一个按钮调用 Razor Page 页面处理程序来删除关联项。
<a class="delete-item" data-id="@item.Id" asp-page-handler="delete" asp-route-id="@item.Id"><img src="/images/delete.png" title="Delete" /></a>
我已经定义了一个 Javascript 点击处理程序。如果不应删除该项目,我需要该处理程序 return false。
$('.delete-item').on('click', function (e) {
var id = $(this).data('id');
var tr = $(this).closest('tr');
var td = tr.find('.item-description');
// Get number of lease details for this lease
$.ajax({
type: 'GET',
url: '?handler=LeaseDetailCount',
contentType: 'application/json',
dataType: 'json',
data: { 'leaseId': id },
})
.done(function (response) {
var description = 'Delete "' + description + '"? Are you sure? This cannot be undone.\r\n\r\n';
if (response.count == 0)
description += 'This lease has no lease details.'
else
description += 'WARNING: This lease has ' + response.count + ' lease detail(s).';
if (!confirm(description))
return false;
})
.fail(function (response) {
alert(response.responseText);
})
//.always(function (response) {
//});
}
当然,问题在于 AJAX 调用是异步的。所以在显示我的确认之前 return 秒。
我怎样才能让上面的代码按我想要的方式工作?
如果您不想为锚标签设置 asp-page-handler
,也可以。正如你提到的
AJAX call is asynchronous
我们无法预测哪个结果先出现,href 导航还是 onclick AJAX 响应
<a class="delete-item" data-id="@item.Id"><img src="/images/delete.png" title="Delete" /></a>
在AJAX.done
事件中,如果确认是OK
页面重定向到delete
处理程序
window.location.href = "/?id=" + id + "&handler=delete";
.done(function (response) {
......
.......
if (!confirm(description))
return false;
else
window.location.href = "/?id=" + id + "&handler=delete";
})
我的页面有一个按钮调用 Razor Page 页面处理程序来删除关联项。
<a class="delete-item" data-id="@item.Id" asp-page-handler="delete" asp-route-id="@item.Id"><img src="/images/delete.png" title="Delete" /></a>
我已经定义了一个 Javascript 点击处理程序。如果不应删除该项目,我需要该处理程序 return false。
$('.delete-item').on('click', function (e) {
var id = $(this).data('id');
var tr = $(this).closest('tr');
var td = tr.find('.item-description');
// Get number of lease details for this lease
$.ajax({
type: 'GET',
url: '?handler=LeaseDetailCount',
contentType: 'application/json',
dataType: 'json',
data: { 'leaseId': id },
})
.done(function (response) {
var description = 'Delete "' + description + '"? Are you sure? This cannot be undone.\r\n\r\n';
if (response.count == 0)
description += 'This lease has no lease details.'
else
description += 'WARNING: This lease has ' + response.count + ' lease detail(s).';
if (!confirm(description))
return false;
})
.fail(function (response) {
alert(response.responseText);
})
//.always(function (response) {
//});
}
当然,问题在于 AJAX 调用是异步的。所以在显示我的确认之前 return 秒。
我怎样才能让上面的代码按我想要的方式工作?
如果您不想为锚标签设置 asp-page-handler
,也可以。正如你提到的
AJAX call is asynchronous
我们无法预测哪个结果先出现,href 导航还是 onclick AJAX 响应
<a class="delete-item" data-id="@item.Id"><img src="/images/delete.png" title="Delete" /></a>
在AJAX.done
事件中,如果确认是OK
页面重定向到delete
处理程序
window.location.href = "/?id=" + id + "&handler=delete";
.done(function (response) {
......
.......
if (!confirm(description))
return false;
else
window.location.href = "/?id=" + id + "&handler=delete";
})