-2

我正在开发一个项目,其中我有一个具有两个主要方法“保存”和“关联”的对象,它们都使用 jQuery ajax 调用来访问服务器。

两种方法都将回调函数作为参数,但只有一个回调方法被触发,即使在 Chrome 开发工具中查看所有保存/关联帖子都正在发生并从服务器返回有效数据。

以下是我正在使用的三件作品:

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 调用以相同的方式设置时(在“完成”处理程序中触发回调。

我正在测试最新版本的 Chrome (25.0.1364.172 m)。也在 Firefox 19 中进行了测试,结果相同。

4

1 回答 1

5

done fail并且always不是有效的 ajax 属性,它们用于延迟对象。

您需要使用错误/成功/完成。

于 2013-03-25T21:38:55.667 回答