【问题标题】:JQuery AJAX post request raising exception although handled尽管已处理,但 JQuery AJAX 发布请求引发异常
【发布时间】:2013-07-04 22:14:16
【问题描述】:

我有一个获取用户名/密码的登录 JSON 服务。 当我通过JQuery 1.10.1 AJAX 调用它并输入正确的凭据时,它就可以工作了。但是当我输入不正确的凭据时,错误函数处理程序会按预期触发,但是! jquery 仍然会引发我可以在 Chrome/Firefox 控制台中看到的异常:

POST http://localhost/services/admin/login 500 (Internal Server Error) 

处理了(故意的)ajax 错误!为什么我将其视为 javascript 错误??

谢谢。

$.ajax({
    url: "../services/admin/login",
    type: "POST",
    data: JSON.stringify({ 'username': username, 'password': password }),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    cache: false,
    success: function (response, textStatus, jqXHR) {
        window.location = "index.html";
    },
    error: function (jqXHR, textStatus, errorThrown) {
        $(".errorDiv").html(jqXHR.responseJSON);
    }
});

【问题讨论】:

  • 你能发布你的服务器端代码吗?
  • 主要是:echo json_encode($e->getMessage()); 其中$e是例外

标签: jquery ajax json google-chrome


【解决方案1】:

Chrome 和 Firefox 将您在控制台中遇到的错误视为 网络 错误,而不是 Javascript 运行时错误。

无论您是否在某处处理了错误,他们都会打印此消息,因为该消息的目的纯粹是提供信息。

【讨论】:

  • 感谢您的回复。我不认为你是正确的,因为它说这是特定 JS 文件行中的错误:jquery-1.10.1.min.js:6。此外,firefox 专门将其视为 javascript 错误
  • 不,错误实际上是说从这个特定的 JS 文件发出的请求失败了。打印的文件是您从中启动 AJAX 请求的文件。
  • 谢谢。那么如何在我的系统中避免此类错误呢?在我处理所有 ajax 调用后,我不应该看到任何错误(即使它们返回错误)...
  • 在控制台中没有任何错误的唯一方法是服务器以成功的 HTTP 返回码响应您的请求。即 1xx、2xx 和 3xx 响应代码。
  • 我明白了。但我读到:stackoverflow.com/questions/674027/… 并返回 4** 似乎是正确的做法。据我所知,没有任何网站会执行发布这些控制台错误的 AJAX 调用(即使发生错误)。此外,我记得以前处理过 JQuery ajax,但我从未见过这些错误。
【解决方案2】:

这就是它的工作原理,浏览器在网络堆栈中遇到错误并正在报告它。如果你只是在做身份验证,你真的应该在你的服务器上触发一个 401 - Not authorized 响应,500 意味着一个完整的服务器错误。

此外,就像这样来回传递凭据被视为反模式,不建议这样做。

【讨论】:

  • 感谢您的建议 - 我会触发 401 进行身份验证,但这个问题不仅与登录问题有关,而且与我系统上的任何服务有关 - 我不应该看到任何 javascript 错误在我的控制台中,那么我将如何处理使用 JQuery 的 AJAX 调用中的错误,返回错误 500?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 2015-08-19
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多