4

I'm having a trouble with ajax requests and server responses:

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

The thing is - sometimes I get succes, when I should get it, but sometimes I can get 500 status, and it is normal and expected. The same ajax call works for correct requests, but fails for others. I want to display an error message if I get a 500 server error, but for some reason the ajax does not complete. Thus, neither error: nor complete: work. Maybe the reason for that is 'jsonp' datatype? Other datatypes do not work though. Can someone help please?

Or maybe give me an advice on how to detect server status any other way.

4

4 回答 4

3

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

于 2013-05-23T15:25:00.493 回答
1

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

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);
});
于 2013-05-23T15:55:06.390 回答
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
});

请告诉我们你的服务器抛出了什么错误。

于 2013-05-23T15:19:14.553 回答
0

谢谢大家的意见。Jquery .ajax 确实不会在 jsonp 请求上出错。获取错误消息的方法是实现 jquery-jsonp 插件: https ://github.com/jaubourg/jquery-jsonp

于 2013-05-24T07:41:18.400 回答