我有以下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,但成功函数没有运行.相反,它似乎正在运行错误功能.
该脚本作为ASP.NET ImageButton的单击事件侦听器运行.如果_IsValid == false,则调用e.preventDefault()以防止回发.
解决方法
我认为您目前遇到的问题是您的IsValid函数将始终返回true.这是因为在返回函数之前,AJAX帖子没有时间完成.毕竟它是一个异步功能.
从我可以告诉你想要有效的表格与AJAX请求,如果有效提交表格,否则显示一个弹出窗口.如果这是正确的你应该做的事情……
$(".myclass input.Submit").click(function (e) { e.preventDefault(); ProcessForm(); }); function ProcessForm(){ $.ajax({ url: "/myURL",success: function (data) { var array = eval(data); if (array[0] == 0) { ShowPopup(array[1]); } else//VALID { document.forms[0].submit(); //OR IF YOU HAVE MULTIPLE FORMS SPECIFY AN ID... document.getElementById("FormElement").submit(); } },error) { } }); }