我正在开展一个项目,在这个项目中,我有两个主要方法的对象," save"并且"关联",两者都使用jQuery ajax调用来访问服务器。
这两种方法都将回调函数作为参数,但只有一种回调方法被触发,即使在Chrome开发工具中查看所有Save / Relate帖子正在发生并从服务器返回有效数据。
以下是我与之合作的三件作品:
Entity.prototype.save = function(callback)
{
var self = this;
$.ajax({
url: '/Entity/Create',
type: 'POST',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(model),
success: function (data){},
error: function (xhr, status, err) { },
complete: function (data)
{
console.log(self.get('_id') + ' saved.')
if(callback)
callback(data.responseText);
}
});
}
Entity.prototype.relate = function(relatedEntityId, isRelate, callback)
{
var self = this;
var action = isRelate ? 'Relate' : 'Unrelate';
$.ajax({
url: '/Entity/' + action,
type: 'POST',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ primaryEntityId: self._id.value, relatedEntityId: relatedEntityId }),
done: function (data) { },
fail: function (xhr, status, err) { },
always: function (data)
{
console.log(self.get('_id') + 'related to ' + relatedEntityId);
if(callback)
callback(data.responseText);
}
});
}
// from main code:
entity.save(function (id) // this callback fires
{
// request is a previously saved 'entity'
request.relate(id, true, function (id) // this callback does not
{
console.log('related callback completed.');
});
});
我不确定为什么第二次回调(来自request.relate)没有触发,当$ .ajax调用以相同的方式设置时(在&#中触发回调) 39;完成'处理程序。
我在最新版本的Chrome(25.0.1364.172 m)中进行了测试。也在Firefox 19中测试过相同的结果。
答案 0 :(得分:5)
done
fail
和always
不是有效的ajax属性,它们适用于延迟对象。
您需要使用错误/成功/完成。