jquery ajax没有完成

时间:2013-05-23 15:12:40

标签: javascript jquery ajax

我遇到了ajax请求和服务器响应问题:

$.ajax({
    url: servurl,
    dataType: "jsonp",
    data: {... },
    crossDomain: true,
    error: function(){},
    success: function(){},
    complete: function(){alert('complete')}
});
}

事情是 - 有时我会成功,当我得到它,但有时我可以得到500状态,这是正常的和预期的。 同样的ajax调用适用于正确的请求,但对其他请求则失败。 如果我收到500服务器错误,我想显示错误消息,但由于某种原因,ajax没有完成。因此,error:complete:都不起作用。 也许原因是'jsonp'数据类型?其他数据类型不起作用。 有人可以帮忙吗?

或者可以给我一个关于如何以任何其他方式检测服务器状态的建议。

4 个答案:

答案 0 :(得分:3)

jsonp请求不会触发错误回调 by design,因此您无法通过javascript捕获错误。我建议在服务器上实现一个检测jsonp请求的错误处理程序,并返回指示发生错误而不是500状态代码的jsonp。

答案 1 :(得分:1)

请注意error:从1.8开始不推荐使用,并且不会为JSONP调用{但是我想知道您是否可以成功使用1.5 deferred http://api.jquery.com/category/deferred-object/引入的Promise功能: / p>

jqXHR.fail(function(jqXHR, textStatus, errorThrown) {});
jqXHR.done(function(data, textStatus, jqXHR) {});
jqXHR.always(function(data|jqXHR, textStatus, jqXHR|errorThrown) { });

代码示例:

$.ajax({
    url: servurl,
    dataType: "jsonp",
    data: {... },
    crossDomain: true
}).done(function(data, textStatus, jqXHR){ //replace success
    alert(textStatus);
}).always(function(data|jqXHR, textStatus, jqXHR|errorThrown) { // replace complete
    alert(textStatus);
}).fail(function(jqXHR, textStatus, errorThrown) { // replace error
    alert(errorThrown);
});

答案 2 :(得分:0)

确保您正在访问您的服务器。也许您在服务器中请求特定的contentType(例如application/json)并且您没有将该属性用于您的ajax调用。

根据您的要求,如果出现错误(400,404,500 ...),则显示任何消息,您可以使用我的自定义函数进行ajax错误响应:

function onErrorFunc(jqXHR, status, errorText) {
    alert('Status code: ' + jqXHR.status + '\nStatus text: ' + status +
    '\nError thrown: ' + errorText);
}

用法:

$.ajax({
    //some options
    error: onErrorFunc
});

请告诉我们您的服务器发生了什么错误。

答案 3 :(得分:0)

谢谢大家的评论。 Jquery .ajax真的不会给jsonp请求带来错误。 获取错误消息的方法是实现jquery-jsonp插件: https://github.com/jaubourg/jquery-jsonp