繁体   English   中英

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

[英]jQuery AJAX returns 200 OK status, but errors. How can I view details of error?

我有以下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函数。

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

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

您可以在浏览器中使用javascript调试工具,例如FireFox中的FireBug,它允许您查看AJAX请求和响应。 您将看到通过电线发送的确切内容以及任何可能的错误。

实际上看这个:

dataType: 'json;'

你可能意味着:

dataType: 'json'

当你明确地设置这样的响应内容类型时,你应该确保服务器发送有效的JSON,因为jQuery将尝试解析响应,如果失败,你将得到一个异常。

我也会完全取代:

data: '{"Barcode":"' + $barcode.val() + '", "Email":"' + $email.val() + '"}'

有:

data: JSON.stringify({ Barcode: $barcode.val(), Email: $email.val() })

切勿像构建JSON时那样使用字符串连接。

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

从我可以告诉你想要有效的表格与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) {

         }
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM