我有一个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()
的数据来源于本地存储。你必须通过调用save
或fetch
方法来手动刷新它。
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()
对象的预算值应该是正确的。