jQuery ajax延迟完成功能不正常

时间:2015-10-20 10:49:50

标签: javascript jquery ajax jquery-deferred

我正在执行一个ajax调用,响应是200 OK但是它不能用于完成延迟方法。我尝试在旧的jQuery中使用成功回调(这是从1.8开始折旧)的方式,但这也不起作用。使用失败延迟方法可以找到始终延迟方法,但这看起来更像是使用hack而不是正确使用并使用done。我错过了什么?

的JavaScript

$.ajax({
    url: core.api_url + '/quote/' + core.quote_id + '/items',
    type: 'put',
    dataType: 'array',
    data: $.extend({}, items), // Needs to be converted to an object of objects because jQuery ajax cannot handle arrays of objects
    beforeSend: function(){
        $('.message-container .ui.message.saved').addClass('hidden');
        $('.message-container .ui.message.saving').removeClass('hidden');
    }
}).done(function(response){
    $('.message-container .ui.message.saving').addClass('hidden');
    if(response.success == true){
        $('.message-container .ui.message.saved').removeClass('hidden');
    }
    if(response.success == false){
        $('.message-container .ui.message.failed').removeClass('hidden');
    }
});

控制台日志

HTTP/1.1 200 OK
Server: nginx/1.8.0
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: no-cache

Response:
{"success":true,"results":[{"id":31}]}

2 个答案:

答案 0 :(得分:0)

像adeneo所说:dataType:' array'无效,可能jquery将触发.fail()而不是.done()。

https://api.jquery.com/deferred.fail/

答案 1 :(得分:0)

愚蠢的是我没有意识到不允许使用dataType数组。将此更改为json按预期工作。

对所有使用成功,完成或错误的人说。从jQuery 1.8开始,它们确实被折旧了。请参阅以下内容,以获取jQuery文档的直接参考。

  

弃用通知:jqXHR.success(),jqXHR.error()和   从jQuery 1.8开始,不推荐使用jqXHR.complete()回调函数。准备   你的代码最终删除,使用jqXHR.done(),jqXHR.fail(),   和jqXHR.always()相反。

http://api.jquery.com/jQuery.ajax