无需重新登录即可更新 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。您必须通过调用 save
或 fetch
方法手动刷新它。
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 服务器的无限请求,这种情况有时会发生,并会导致他们向您的帐户收费。
我有一个网络应用程序,可以管理用户的预算。 在设置页面中,我可以编辑预算,点击 "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。您必须通过调用 save
或 fetch
方法手动刷新它。
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 服务器的无限请求,这种情况有时会发生,并会导致他们向您的帐户收费。