[英]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()
的数据是从本地存储派生的。 您必须通过在其上调用save
或fetch
方法来手动刷新它。
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.