【问题标题】:AJAX query error/successAJAX 查询错误/成功
【发布时间】:2011-06-09 16:00:53
【问题描述】:

如果我错了,请纠正我,但我对 $.post 成功/失败的理解是,如果 url 有效,这将返回成功。唯一会返回失败的情况是 url 无效。

如果这是真的,我如何验证成功功能?我问的原因是无论发生什么,即使后面的代码有错误,我总是会收到相同的成功警报。

【问题讨论】:

  • 只需检查传递给您的成功函数的 xhrObject 中的响应代码。如果不是 200,你就知道你有问题。

标签: jquery


【解决方案1】:

这取决于您如何处理服务器端的错误。

您可以使用try/catch 使用变量作为flag true/false 和一条消息来识别错误情况。返回js时,检查这些变量以确保响应正常

【讨论】:

【解决方案2】:

不,在很多情况下$.post 可能会返回错误。

jQuery Source Code可以看出,HTTP状态码是用来判断请求是否成功的:

// If successful, handle type chaining 
if ( status >= 200 && status < 300 || status === 304 ) {

返回“坏”状态的原因有很多。这可能是由于 404(错误 URL),但也可能是由于 500(内部服务器错误)。在后一种情况下,服务器代码中的异常可能会触发错误。

为了帮助解决您的错误,您需要提供更多信息。发生了什么类型的错误?你有错误的文本吗?

【讨论】:

    【解决方案3】:

    我发现 ajax.success() 的命名有点误导。 另外(来自 jQuery 文档):

    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');
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 2023-02-15
      • 2023-03-24
      • 1970-01-01
      • 2021-12-17
      • 2019-08-25
      • 1970-01-01
      • 2011-11-24
      相关资源
      最近更新 更多