在没有重新登录的情况下从Parse.com更新数据



我有一个web应用程序,为用户管理预算。在设置页面,我可以编辑预算,点击"保存"后我回到主页面,在那里我有一行说明预算金额。问题是,当我登录的时候,我看到的是正确的预算,在编辑预算后回到主页面,我看到的还是原来的金额。只有在注销并重新登录后,主页中的那一行才会更新为新的金额。有解决方案吗?

节省新预算的代码:

    $("#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()本身是一个异步方法,因为你没有在保存方法中调用成功函数,所以你的应用程序将在知道保存函数是否工作之前导航回"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()返回正常的解析。用户对象。您可以直接使用,无需提前查询。所以你可以重写你的第一个代码如下:

$("#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()对象的预算值应该是正确的。

相关内容

最新更新