我知道关于这个主题已经存在很多问题,但没有一个答案对我有用。请耐心一点,看看我的情况。
我在model.save()
按钮的单击事件中使用主干的功能保存我的主干模型。
一旦模型成功保存,我的目标是根据返回的响应执行某些操作,如下所示:
SaveActivity: function( e )
{
this.model.set({'value': 0});
this.model.save(null, /* or {} - no difference with any of the two*/
{
success: function (model, response)
{
var id = null;
var stringed = JSON.stringify(model);
/* perform operation with stringed */
},
error: function (model, response)
{
//i am in error
}
});
alert("Done"); //This is the alert mentioned below
}
我在这段代码中看到回调函数的一个非常奇怪的行为。如果我删除警报,则会触发错误回调(总是)。另一方面,有了这个警报,会发生什么 - 一旦单击按钮,就会触发“POST”请求以保存模型,然后弹出警报,而不管“保存”是为了完成。
现在问题来了——如果我在警告框中选择“确定”,在我收到发布请求的“200 OK”http 响应(再次通过控制台验证)之前,就会触发错误回调。如果我在选择警报框之前等待“200 OK”来进行 POST,则会触发成功回调。但问题是,模型在这两种情况下都得到了保存——无论我是否等待 200 OK http 响应来进行 POST。此外,POST 请求需要几秒钟才能返回成功响应。
我意识到这是因为save()
函数的异步行为。但是我尝试了很多东西,但问题仍然存在。对此的任何帮助将不胜感激。
谢谢!!!
这是此功能的原始代码
SaveDraftActivity: function( e )
{
if (CKEDITOR.instances['editor1'].getData() == '')
{
alert('Activity Content cannot be left blank. Please fill the content before saving.');
return false;
}
else
{
this.model.set({'publishStatus' : 0});
this.model.save({},
{
success: function (model, response)
{
var id = null;
var stringed = JSON.stringify(model);
console.log("in success ");
var words = stringed.split(",");
for (var i=0; i<words.length; i++)
{
if (words[i].indexOf('tenantActivityId') != -1)
{
j = words[i].indexOf(":");
j+=2;
id = words[i].substring(j, words[i].length-1);
//break;
}
}
var tenantActivityId = id;
if (tenantActivityId != "")
document.getElementById("formAttachment").submit(); //Another POST Request
else
document.getElementById("RedirectForm").submit(); //Another POST Request
},
error: function (model, response)
{
console.log("in error ");
}
});
}
alert("Activity is successfully saved.");
},