我想从Jquery的视图中调用我的控制器,返回计数。调试结果变量时返回undefined。请有人更正我的代码。
查看:
<script type="text/javascript">
$(function () {
$('.icon-delete').click(function () {
debugger;
var v = 'e8a6bdf4-1da6-41e0-8423-86ffacf71703';
var result= GetCollectionCount(v);
var answer = confirm('Do you want to delete this record?');
if (answer) {
$.post(this.href, function () {
window.location.reload(); //Callback
});
return false;
}
return false;
});
});
function GetCollectionCount(id) {
$.ajax({
type: 'POST',
contentType: "application/json;charset=utf-8",
url: '/AdminNew/CollectionCount',
dataType: 'json',
data: { "id": id },
//traditional: true,
success: function (ajaxresult) {
//alert(ajaxresult);
return ajaxresult;
},
failure: function (ajaxresult, status) {
console.log(ajaxresult)
}
});
}
答案 0 :(得分:2)
调试结果变量时返回undefined。
这是正常的,也就是AJAX的工作方式。 AJAX 中的第一个 A 代表异步。这意味着$.ajax
函数不会返回任何内容。它用于触发对服务器的AJAX请求和唯一的单一地点,您可以在success
回调中使用此AJAX调用的结果。在您的示例中,您似乎正在尝试立即使用这些结果。
答案 1 :(得分:0)
问题是GetCollectionCount
正在向服务器发出异步请求。也就是说,其余代码继续执行,不等待请求完成。
您需要将代码依赖于请求放在成功请求时执行的回调中:
$(function () {
$('.icon-delete').click(function () {
debugger;
var v = 'e8a6bdf4-1da6-41e0-8423-86ffacf71703';
GetCollectionCount(v);
});
});
function GetCollectionCount(id) {
$.ajax({
type: 'POST',
contentType: "application/json;charset=utf-8",
url: '/AdminNew/CollectionCount',
dataType: 'json',
data: { "id": id },
//traditional: true,
success: function (ajaxresult) {
var answer = confirm('Do you want to delete this record?');
if (answer) {
$.post(this.href, function () {
window.location.reload(); //Callback
});
return false;
}
return false;
},
error: function (ajaxresult, status) {
console.log(ajaxresult)
}
});
}
答案 2 :(得分:0)
你应该尝试类似的东西:
$(function () {
$('.icon-delete').click(function () {
debugger;
var v = 'e8a6bdf4-1da6-41e0-8423-86ffacf71703';
GetCollectionCount(v);
});
});
function GetCollectionCount(id) {
$.ajax({
type: 'POST',
contentType: "application/json;charset=utf-8",
url: '/AdminNew/CollectionCount',
dataType: 'json',
data: { "id": id },
//traditional: true,
success: getCollectionSuccess,
error: errorCallback
});
}
function getCollectionSuccess(ajaxResult){
var answer = confirm('Do you want to delete this record?');
if (answer) {
$.post(this.href, function () {
window.location.reload(); //Callback
});
return false;
}
}
function errorCallback(errorMsg, status){
console.log("Error Message : "+errorMsg+" Error code : "+status);
}
答案 3 :(得分:0)
将async
设置为false可以解决@Darin提到的问题:
function GetCollectionCount(id) {
$.ajax({
// ... your settings
async: false,
success: function (ajaxresult) {
//alert(ajaxresult);
return ajaxresult;
},
failure: function (ajaxresult, status) {
console.log(ajaxresult)
}
});
}