jQuery AJAX返回200 OK状态,但错误.如何查看错误的详细信息?

Cur*_*urt 7 error-handling jquery

我有以下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;
 }
}
Run Code Online (Sandbox Code Playgroud)

AJAX响应是200 OK,但success功能没有运行.相反,它似乎正在运行该error功能.

该脚本作为ASP.NET ImageButton的单击事件侦听器运行.如果_IsValid==false,则e.preventDefault()调用以防止回发.

奇怪的是,如果我将return false添加到事件监听器函数的末尾,则此代码将运行该success函数.

如何找出导致此错误的原因以便我可以解决?

mus*_*fan 2

我认为你目前遇到的问题是你的IsValid函数总是返回 true。这是因为 AJAX post 在函数返回之前没有时间完成。毕竟它是一个异步函数。

据我所知,您想要使用 AJAX 请求验证表单,如果有效则提交表单,否则显示弹出窗口。如果这是正确的,你应该做类似的事情......

$(".myclass input.Submit").click(function (e) {
    e.preventDefault();
    ProcessForm();
});

function ProcessForm(){
   $.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) {
            ShowPopup(array[1]);
          }
          else//VALID
          {
             document.forms[0].submit();
             //OR IF YOU HAVE MULTIPLE FORMS SPECIFY AN ID...
             document.getElementById("FormElement").submit();
          }
         }
       , error: function (xhr, status, error) {

         }
    });
}
Run Code Online (Sandbox Code Playgroud)