Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQueryAjax返回200个OK状态,但有错误。如何查看错误的详细信息?_Jquery_Error Handling - Fatal编程技术网

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

jQueryAjax返回200个OK状态,但有错误。如何查看错误的详细信息?,jquery,error-handling,Jquery,Error Handling,我有以下jQuery: var fn = { Load: function () { $(".myclass input.Submit").click(function (e) { var _IsValid = fn.IsValid(); if (_IsValid == false) { e.preventDefault(); } //Popup

我有以下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的单击事件侦听器运行。如果
\u IsValid==false
,则调用
e.preventDefault()
以防止回发

奇怪的是,如果我在事件侦听器函数的末尾添加return false,那么这段代码将运行
success
函数

如何找出导致此错误的原因,以便解决此问题

如何找出导致此错误的原因,以便解决此问题

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

事实上,看看这个:

dataType: 'json;'
你可能是说:

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

我还将完全取代:

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


永远不要像构建JSON时那样使用字符串连接。

我认为当前的问题是,
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) {

         }
    });
}

谢谢你的回复。我已经做了您建议的更改,但仍然存在错误。此外,我还尝试在谷歌Chrome中调试javascript<代码>xhr.ResponseText=”“。您还有其他建议吗?我的建议是查看网络选项卡,在那里可以看到AJAX请求和响应。但是在这种情况下,如果服务器发送了一个空响应,而您显式地设置了
数据类型:“json”
,那么,您知道,
'
是无效的json。因此,您可以尝试修复服务器以发送有效的JSON。我还更新了我的问题,提供了有关应用程序服务器发送有效JSON的更多信息。其返回
[错误,“条形码123不存在”]
。很确定这是有效的JSON@Curt,实际上,它是有效的JSON。这是您在“网络”选项卡中看到的响应吗?您是否修复了
数据类型:“json;”您的代码有问题吗?
$(".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) {

         }
    });
}