我知道在这个主题上已经有很多问题,但没有一个答案对我有用。请稍微耐心一点,看看我的情景。
我在按钮的点击事件中使用主干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.");
},