「save」と「relate」の2つの主要なメソッドを持つオブジェクトがあり、どちらもjQueryajax呼び出しを使用してサーバーにアクセスするプロジェクトに取り組んでいます。
どちらのメソッドもコールバック関数をパラメーターとして受け取りますが、Chrome開発ツールですべての保存/関連付けの投稿が行われ、サーバーから有効なデータが返されているにもかかわらず、コールバックメソッドの1つだけが起動しています。
これが私が取り組んでいる3つの部分です:
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.');
});
});
$ .ajax呼び出しが同じ方法で設定されている場合(コールバックが「complete」ハンドラーで起動される場合)、2番目のコールバック(request.relateから)が起動しない理由がわかりません。
Chromeの最新バージョン(25.0.1364.172 m)でテストしています。Firefox19でも同じ結果が得られました。