【问题标题】:jQuery ajax call - Getting meaningful error messagesjQuery ajax 调用 - 获取有意义的错误消息
【发布时间】:2012-07-24 04:49:06
【问题描述】:

我有一个 jQuery ajax 调用,它在 IE 中运行良好,但在 Chrome 和 Firefox 中不断出错。我在我的应用程序的其他地方有类似的 ajax 调用,它们在所有浏览器中都能正常工作,但由于某种原因,这个没有。

首先,我在这里做的事情是否明显会在 IE 以外的浏览器中中断,其次同样重要的是,有没有办法从 error: function (e) {} 块中获得有意义的东西?

                $.ajax({
                type: "POST",
                url: "http://localhost:52350/FabRouting/Webservice/FinalizeFileStream.asmx/FinalizeFileStreamDoc",
                data: JSON.stringify({ DocID: docID, FileSize: file.size }),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    if (data.d.length == 0) {
                        //error
                        $("[id$=txtResult]").val("error 0");
                    }
                    else {
                        $("[id$=txtResult]").val(data.d[0].Result);
                    }
                },
                error: function (e) {
                    //error
                    $("[id$=txtResult]").val("error");
                }
            });

【问题讨论】:

  • 打开控制台 (F12) 并检查错误内容。它应该返回一个 asp.net 错误页面(如果您没有打开客户错误)
  • JSON.stringify 在某些但不是所有浏览器中可用。您需要添加一个库(例如 json2.js )以将该功能添加到不支持它的浏览器。
  • 您是通过 alert(e) 还是 console.log(e) 来查看是什么?另外,尝试使用 Chrome 开发工具。 (按 Ctrl+Shift+J),打开控制台查看错误。告诉我它是怎么说的。
  • 控制台显示它实际上正在被调用,并且 Post 确实以正确的格式包含我的数据。响应是空白的。
  • 我在其他地方使用 JSON.stringify,它在我定位的浏览器中运行良好。帖子似乎确实在发布我所拥有的东西,所以它似乎也在这里工作。

标签: jquery asp.net ajax


【解决方案1】:

误差函数有三个参数

error: function(jqXHR, textStatus, errorThrown) { //code here }

当您只使用一个时。 errorThrown 应该有一些更有用的信息。

EDIT2 - 因为键不是字符串,所以我关于它的破坏的答案 - 应该没问题。但是,如果您使用帖子,为什么要对数据进行字符串化?你应该可以直接传递json数组。

【讨论】:

  • 我目前正在尝试弄清楚如何在我目前拥有的代码中使用 error(jqXHR, textStatus, errorThrown) 行,但是是的,我尝试将引号放在 JSON.stringify 和它不会改变任何东西。
  • @divtag 您需要更新错误函数以使用所有三个参数:error: function (jqXHR, textStatus, errorThrown) { //error $("[id$=txtResult]").val("error"); }
  • @divtag 另外,请参阅我的第二次编辑:如果您使用帖子,为什么要对数据进行字符串化?您应该能够直接传递 json 数组。我的猜测是让它传回一个参数,而 FinalizeFileStreamDoc 期待两个。
  • 我已经这样更新了:error: function (jqXHR, textStatus, errorThrown) {alert(errorThrown)} 是获取错误的正确方法还是我遗漏了什么,它回来未定义.
  • 我在不久前根据其他人的建议使用 JSON.stringify 在构建其他代码的 ajax 调用时,他们说我这样做的方式很好,但这更好。我总是可以放弃这个,但是基于控制台,帖子看起来不错,我只是得到一个空白返回
【解决方案2】:

它最终不是我的代码或浏览器(好吧)毕竟只是我的错误。

我一直在研究和阅读有人在跨域 ajax 调用出现错误时遇到的问题。我不想这样做,但是出于某种原因,我确实启动了两个 Visual Studio Web 服务器。我看了看,我正在使用硬编码的 url (http://localhost:52350/FabRouting/Webservice.......) 调用 web 服务,我正在使用新的 url (http://localhost :59986/FabRouting/Tes.....) 来访问页面。

由于某种原因,这在 IE 中运行良好,但是当我在 Chrome 或 Firefox 中尝试时,它无法正常工作。我更改了访问页面的位置,并且从 ajax 调用中获得了良好的返回值。

我仍然想知道如何得到一个更有意义的错误,@dtryan 让我在其中取得了部分进展。如果有人能帮我弄清楚这一点,我会将他们的答案标记为答案,而不是这个答案。

编辑: 后来我发现我实际上能够以我之前尝试的方式以及@dtryan 建议的方式获取错误消息。问题是由于某种原因,由于它试图跨域而引发错误,但我无法捕获该错误。

从那以后,我遇到了内存不足错误等问题,而那些我能够捕获和查看的问题都很好。我认为这只是一场完美的风暴,导致错误不可见。如果有人有任何方法来捕获这些错误,那么很高兴知道。

【讨论】:

  • 你能告诉我你在开发者工具或萤火虫中遇到了什么错误吗?
  • 我没有收到任何错误,这就是问题所在。我不确定我是否正确捕获了错误,因为我没有收到任何错误。当我最终查看 firebug 时,我意识到我也没有收到任何错误。现在我已经解决了这个问题,我在继续时遇到了其他错误,并且我能够捕获这些错误。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 2020-06-29
  • 2018-05-28
  • 2020-01-26
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
相关资源
最近更新 更多