无需重新登录即可更新 Parse.com 的数据

Updating data from Parse.com without re-login

我有一个网络应用程序,可以管理用户的预算。 在设置页面中,我可以编辑预算,点击 "save" 后我 return 到主页面,那里有一行显示预算金额。 问题是,当我登录时,我看到了正确的预算,在编辑预算并 return 进入主页后,我仍然看到旧的金额。只有在注销并重新登录后,主页中的该行才会更新为新金额。 有什么解决办法吗?

保存新预算的代码:

    $("#saveNewBudgetAmount").click(function(){
    var User = Parse.User.extend("User");
    var query = new Parse.Query(User);
    var newBudget = $("#newBudgetSum").val();
    query.equalTo("objectId", Parse.User.current().id);
    query.first({
        success: function (User) {
            User.save(null, {
                success: function (user) {
                    User.set("budget", newBudget);
                    User.save();
                    location ="Mainpage.html";
                }
            });

        }
    });

});

以及在主页上显示它的代码:

    var MBudget = (function () {
    if (Parse.User.current()) {
        return("Your monthly budget is:" +" "+Parse.User.current().get("budget")+" "+"<a href=Settings.html>(Edit)</a>");

    }

问题是这样 api : Parse.User.current() 从不同步云中的数据。 Parse.User.current()的数据来源于localstorage。您必须通过调用 savefetch 方法手动刷新它。

Parse.User.Current() return 普通 Parse.User 对象。无需提前查询,可直接使用。所以你可以重写你的第一个代码如下:

$("#saveNewBudgetAmount").click(function() {
  var user = Parse.User.current() ; 
  var newBudget = $("#newBudgetSum").val();
  user.set("budget", newBudget);
  user.save(null,{
    success: function(user) {
      // feedback user and redirect page.
    },
    error: function(user, error) {
      //You should always handle error.
      console.error(error.message) ;
    }
  }) ; 
});

使用此代码,本地数据将在 save() 调用成功完成时刷新。在您的主页上,Parse.User.current() 对象的预算值应该是正确的。

发生了一些事情。

首先,您应该简化您的代码,并同时使用警报和错误处理,以便了解您的代码是否有效,以及何时进行回调。您还在设置任何新值之前调用 .save() 一次,因此您有一个无用的保存。

您还需要为您使用的每个保存函数提供成功和错误回调 - .save() 本身是一种异步方法,并且由于您没有在保存方法中调用成功函数,因此您的应用程序在知道保存功能是否有效之前将导航回 "Mainpage.html"。这是一个更好的实现:

var newBudget = $("#newBudgetSum").val();

var currentUser = Parse.User.current();
currentUser.save(
    {
    // Set as many properties as you like in this field, 
    // think of it as a JSON object except you don't 
    // have to enclose the values in strings.
    budget : newBudget,
    }, {
    success: function(user) {
        alert("Budget successfully saved, new budget is: " + user.get("budget"));
    },
    error: function(error) {
        // error functions will always have an error argument handed back to the client, 
        // with properties error.code and error.message. Error messages are incredibly useful.
        alert("Budget save failed, error: " + error.code + " " + error.message);
    }
});

另一个提示是,我建议 Parse.com 的所有用户在开发过程中使用 alert() 消息作为成功和错误回调,原因有很多 - 但关键原因是 1) 它会提醒您代码是否有效,以及 2) 它将防止意外错误导致对 Parse.com 服务器的无限请求,这种情况有时会发生,并会导致他们向您的帐户收费。