model.save()中的成功和错误回调是随机/异步的

时间:2013-09-13 09:43:18

标签: jquery post backbone.js asynchronous callback

我知道在这个主题上已经有很多问题,但没有一个答案对我有用。请稍微耐心一点,看看我的情景。

我在按钮的点击事件中使用主干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.");           
},

0 个答案:

没有答案