我有一些jQuery脚本使用AJAX回发到控制器,但控制器永远不会被命中。我的AJAX调用出现了某种错误,但它过得太快而我无法读取它。
我的AJAX:
function ValidateByBASFID(basfID) {
$.ajax({
url: 'AJAX/ValidateByBASFID',
data: '{"BASFID":"' + basfID + '"}',
type: 'POST',
dataType: 'json',
success: function (result) {
if (result)
return true;
else {
$("#txtBASFIDError").html("Invalid BASF ID");
return false;
};
},
error: function (result) {
alert("An error occured. \nStatus: " + result.status
+ "\nStatus Text: " + result.statusText
+ "\nError Result: " + result);
}
});
};
我的控制器:
namespace Section_Signup.Controllers
{
public class AJAXController : Controller
{
[HttpPost]
public JsonResult ValidateByBASFID(string BASFID)
{
Models.Repositories.SectionRepository _repository = new Models.Repositories.SectionRepository();
MemberVM Member = _repository.GetMemberByBASFID(BASFID);
if (Member != null)
return Json(true);
else
return Json(false);
}
}
}
当我在控制器动作中设置一个断点时,它永远不会被击中。
答案 0 :(得分:0)
事实证明问题在于AJAX的异步性质。我将我的AJAX回调连接到提交按钮并尝试验证ID。如果它无效,我将返回false以取消"取消"提交。
问题是脚本不会等待答案回来并在进行AJAX调用后直接提交表单。如果它随后回来是假的,那就太晚了,它会抛出奇怪的错误。
我已将我的AJAX改为:
function ValidateByBASFID(basfID) {
$.ajax({
url: 'AJAX/ValidateByBASFID',
data: { BASFID: basfID },
type: 'POST',
dataType: 'json',
success: function (result) {
if (result)
$('form#formBASFID').submit();
else {
$("#txtBASFIDError").html("Invalid BASF ID");
}
},
error: function (result) {
alert("An error occured. \nStatus: " + result.status
+ "\nStatus Text: " + result.statusText
+ "\nError Result: " + result);
}
});
};
每次取消提交时,调用此AJAX回调的函数都会向提交返回false。它看起来像这样:
$("#btnBASFID").click(function () {
var basfID = $("#txtBASFID").val();
ValidateByBASFID(basfID);
return false;
});
如果随后此AJAX返回ID有效,则再次处理提交。