繁体   English   中英

从Parse.com更新数据而无需重新登录

[英]Updating data from Parse.com without re-login

我有一个网络应用程序,可以管理用户的预算。 在“设置”页面中,我可以编辑预算,单击“保存”后,返回主页面,并在其中显示预算金额的行。 问题是,当我登录时,我看到了正确的预算,在编辑预算并返回主页后,我仍然看到旧的预算。 只有注销并再次重新登录后,主页中的该行才会更新为新金额。 有什么办法吗?

保存新预算的代码:

    $("#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>");

    }

一些事情正在发生。

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

您还需要为您使用的每个保存函数都执行成功和错误的回调-.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服务器的无限请求,这种情况有时会发生,并会导致它们向您的帐户收取费用。

问题是这个api: Parse.User.current()永远不会同步云中的数据。 Parse.User.current()的数据是从本地存储派生的。 您必须通过在其上调用savefetch方法来手动刷新它。

Parse.User.Current()返回正常的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()对象的预算值是正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM