0

我知道关于这个主题已经存在很多问题,但没有一个答案对我有用。请耐心一点,看看我的情况。

我在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.");           
},
4

0 回答 0