jQuery $.ajax() 函数的错误信息来源

23

如果失败,代码的执行路径通常如下:

error: function(msg)

msg来自哪里?

编辑:

我正在使用这个函数($ajax)调用一个WEB服务。如果投票反对的人能够解释一下msg来自哪里,那就太好了!我是在web服务中设置它吗?如果是这样,怎么设置?请不要复制粘贴定义。


参数msg是XMLHttpRequest对象jQuery用于发出请求的。无论它被称为msg还是xhr或其他什么,这就是第一个(或唯一的)参数。在你得到那个例子中,他们应该使用xhr或其他除了msg之外的东西,这很令人困惑。我建议你改变它。是的,我不知道为什么会有负评。这是一个好问题。我会抵消一个负评... - Patrick Karcher
5个回答

20

根据jQuery文档:

error(XMLHttpRequest, textStatus, errorThrown) 函数

如果请求失败,将调用此函数。该函数传递三个参数:
- XMLHttpRequest对象
- 描述发生错误类型的字符串
- 可选的异常对象(如果有)。
第二个参数的可能值(除了null)是“timeout”,“error”,“notmodified”和“parsererror”。这是一个Ajax事件。

当您指定一个参数时,它将是xmlHttpRequestObject。您可以从中获取一些有用的信息。不幸的是,大多数文档都没有正确设置此项。一个好的默认模板是:

error:function (xhRequest, errorText, thrownError)

xhRequest能提供的一些有用信息包括:

  • .status :404:"未找到",500:"服务器错误"。这有时可能非常有帮助。
  • .responseText 是来自服务器的信息,在发生错误时通常无用,但有时可能有帮助。

第二个值是一个字符串,有时很有用。嗯,我猜在文档中可能会提到可能的取值。

每当我检查第三个参数时,它总是未定义的。我认为它从未有过用处。


7
我认为在错误回调函数中的第三个参数errorThrown是指错误的原因。
 error(XMLHttpRequest, textStatus, errorThrown)

该内容需要翻译的是关于it技术的,即从服务器发送文本错误信息。

因此,如果在服务器上设置:

 Response.Status = 403;
 Response.StatusDescription = "Password is not correct";

在客户端上,您会得到:

 textStatus => "error",
 errorThrown => "Password is not correct"

Asp.net MVC的服务器部分将会是:

 return new HttpStatusCodeResult(403, "Password is not correct");

2

这条消息是从您在ajax调用中查询的实际服务器端函数返回的。

这样,您就可以获取错误或任何其他信息,以了解服务器端代码是否按照预期执行。

比如,如果您返回一个字符串"success"

msg.val() 将等于 "success"。

希望这可以帮到您。


0
实际上,正确的方式是:
error: function(req, status, error) {
}

来自jQuery API:

如果请求失败,则调用的函数。该函数传递三个参数:XMLHttpRequest对象,描述发生错误类型的字符串和一个可选的异常对象(如果有)。第二个参数的可能值(除了null)是“timeout”,“error”,“notmodified”和“parsererror”。这是一个Ajax事件。


0

AJAX 返回变量(在本例中为“msg”)是从 AJAX 调用返回的输出 - 在 AJAX 错误的情况下,这很可能是服务器错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接