在这段代码中,我希望来自postgresql的“userid”,它将是ajax或变量“res”的“响应”,存储在全局变量“id”中,以便我可以将它用于将来使用
var id;
function addUser()
{
$.ajax({
url: siteloc + scriptloc + "adduser.py",
data: {username:$("#login").val(), password:$("#password").val(), email:$("#email").val()},
dataType: 'json',
success: function (res) {
window.id = res;
console.log(id);
}
});
}
在console.log(id)中一切顺利,在控制台中显示id。但是当我进入下一个功能时,
function setpersonalinfo()
{
$.ajax({
url: siteloc + scriptloc + "setpersonalinfo.py",
data: {userID:id,
fullname:$("#fullname").val(),
birthday:$("#birthday").val(),
gender:$("#gender").val() },
dataType: 'json',
success: function (res) {
console.log("Successfully added.");
}
});
}
无法识别“userID:id”中的ID。我该怎么做呢?
答案 0 :(得分:1)
创建具有属性id的对象,如此...
var data = new Object({id: ""});
然后将data.id设置为输出,
function addUser()
{
$.ajax({
url: siteloc + scriptloc + "adduser.py",
data: {username:$("#login").val(), password:$("#password").val(), email:$("#email").val()},
dataType: 'json',
success: function (res) {
data.id = res;
console.log(data.id);
}
});
}
并在您的其他函数中引用data.id,
function setpersonalinfo()
{
$.ajax({
url: siteloc + scriptloc + "setpersonalinfo.py",
data: {userID:data.id,
fullname:$("#fullname").val(),
birthday:$("#birthday").val(),
gender:$("#gender").val() },
dataType: 'json',
success: function (res) {
console.log("Successfully added.");
}
});
}
抱歉格式化。
答案 1 :(得分:0)
异步:在addUser()的ajax成功函数中,调用setpersonalinfo(),确保window.id已经设置好并可以使用。
Single-ajax:更好的方法是简单地调用setpersonalinfo()并让服务器确定用户是否已经存在,或者如果没有提交id值,则假设必须首先创建新用户。正确的输入验证无论如何都必须检测重复的用户凭证,因此这不是不必要的工作。然后setpersonalinfo()将返回一个用户ID,您可以在那时设置全局变量。或者理想情况下,不使用全局变量,而是使用闭包来保护用户id的值不被javascript控制台重置。
Synchronous:在调用addUser()时只需使用" asysc":false属性,这样在设置用户id属性之前不会调用setpersonalinfo()。
答案 2 :(得分:0)
尝试这样做:创建一个封装用户数据处理的闭包,然后在返回的闭包内使返回的id成为变量。在你的js中使用以下模式也是一个好主意(称为'模块')。
function Users() {
//Global vars
var newUserId;
var methods = {
add: function(callback) {
$.ajax({
url: siteloc + scriptloc + "adduser.py",
data: { username: $("#login").val(), password: $("#password").val(), email: $("#email").val() },
dataType: 'json',
success: function (res) {
newUserId = res;
console.log(newUserId);
if (typeof(callback) == "function") {
callback();
}
}
});
},
updatePersonalInfo: function () {
$.ajax({
url: siteloc + scriptloc + "setpersonalinfo.py",
data: {
userID: newUserId,
fullname: $("#fullname").val(),
birthday: $("#birthday").val(),
gender: $("#gender").val()
},
dataType: 'json',
success: function (res) {
console.log("Successfully added.");
}
});
}
};
return methods;
}
//Usage example. add() could also pass the new user's id to the callback as a parameter, so
//you wouldn't have to store it at all.
var users = new Users();
users.add(function () {
users.updatePersonalInfo();
});