我有以下 jQuery 代码:
var fn = {
Load: function () {
$(".myclass input.Submit").click(function (e) {
var _IsValid = fn.IsValid();
if (_IsValid == false) {
e.preventDefault();
}
//Popup displays message fine if "return false;" is
//called here but then obviously never posts back.
});
}
, IsValid: function () {
var _IsValid = true;
$.ajax({
url: "/myURL"
, type: 'POST'
, contentType: 'application/json; charset=utf-8'
, data: JSON.stringify({ Barcode: $barcode.val(), Email: $email.val() })
, dataType: 'json'
, success: function (data) {
var array = eval(data);
if (array[0] == 0) {
_IsValid = false;
ShowPopup(array[1]);
}
}
, error: function (xhr, status, error) {
}
});
return _IsValid;
}
}
AJAX响应显示为
200 OK
,但success
函数未被执行。相反,似乎运行了error
函数。该脚本作为ASP.NET ImageButton的单击事件侦听器运行。如果
_IsValid==false
,则调用e.preventDefault()
以防止回发。奇怪的是,如果我在事件侦听器函数末尾添加
return false
,则此代码将运行success
函数。我如何找出导致错误的原因以解决它?
xhr.ResponseText = ""
。您还有其他建议吗? - CurtisdataType: 'json'
,嗯,你知道的,''
是无效的JSON。所以你可以尝试修复你的服务器以发送有效的JSON。 - Darin Dimitrovreturn false
时(正如我在问题的编辑中添加的那样),这种情况就不会发生。这有什么道理吗?是的,我已经更正了json
,我已经更新了问题中的脚本以展示现在正在使用的内容。 - Curtisreturn false
和e.preventDefault()
之间差异的原因是您忘记定义e
变量,因此当您尝试调用preventDefault时会出现js错误。该变量通常作为参数传递给单击处理程序。不幸的是,由于您没有显示您的代码,因此很难为您提供进一步的帮助。查看您的JavaScript调试工具。查看控制台。它肯定包含您问题的答案。 - Darin Dimitrov