如果我错了,请纠正我,但我对$.post
成功/失败的理解是,如果网址有效,这将会成功。唯一一次返回失败的是url无效。
如果是这样,我该如何验证成功功能?我问的原因是无论发生什么事情,即使后面的代码有错误,我总是得到相同的成功警报。
答案 0 :(得分:1)
这取决于您如何处理错误服务器端。
您可以使用try/catch
将变量用作flag true/false
,并使用消息来识别错误情况。返回js时,检查这些变量以确保响应正常
答案 1 :(得分:1)
不,有很多情况$.post
可能会返回错误。
从jQuery Source Code,您可以看到HTTP状态代码用于确定请求是否成功:
// If successful, handle type chaining
if ( status >= 200 && status < 300 || status === 304 ) {
可能会返回“错误”状态的原因有很多。这可能是由于404(错误的URL),但也可能是由于500(内部服务器错误)。在后一种情况下,服务器代码中的异常可能会触发错误。
为了帮助解决您的错误,您需要提供更多信息。发生了什么类型的错误?你有错误的文本吗?
答案 2 :(得分:0)
我发现 ajax.success()的命名有点误导。 另外(来自jQuery docs):
jqXHR.success(),jqXHR.error()和jqXHR.complete()回调 将在jQuery 1.8中弃用。为他们的代码准备代码 最终删除,使用 jqXHR.done(),jqXHR.fail()和jqXHR.always() 代替。
截至目前 - jqXHR.success()是 jqXHR.done()的简单快捷方式。
jqXHR.success = jqXHR.done;
jqXHR.error = jqXHR.fail;
jqXHR.complete = completeDeferred.done;
那么 - 当jQuery调用 jqXHR.success()(又名 jqXHR.done())时?
好吧 - 如果我正确看待来源,应该发生两件事:
1)Http响应代码必须是:
status >= 200 && status < 300 || status === 304
2)如果有数据返回 - 解析(来自json,xml等)不应该有错误:
try {
success = ajaxConvert( s, response );
statusText = "success";
isSuccess = true;
} catch(e) {
// We have a parsererror
statusText = "parsererror";
error = e;
}
所以 - 回答你的问题。 JavaScript不知道你的服务器端代码(PHP,ASP等)发生了什么。你应该做的是从服务器端代码发送一个json响应回javascript,例如,如果没有错误就发送1,如果有错误则发送2:
//php file:
//send 2 in case of an error
echo json_encode(array('error'=>2));
//js file:
if(ajaxresponse.error && ajaxresponse.error == 2) {
alert('error happened');
}