[英]Assign the ajax response to a global variable
在這段代碼中,我希望來自postgresql的“用戶ID”(將是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。 我該怎么做呢?
像這樣創建具有屬性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.");
}
});
}
抱歉,格式化。
異步:在addUser()的ajax成功函數中,調用setpersonalinfo(),以確保window.id已設置並可以使用。
單ajax:一種更好的方法是簡單地調用setpersonalinfo()並讓服務器確定用戶是否已經存在,或者是否沒有提交id值,然后假定必須首先創建一個新用戶。 正確的輸入驗證無論如何都必須檢測到重復的用戶憑證,因此這不是不必要的工作。 然后,setpersonalinfo()將返回一個用戶ID,此時您可以設置全局變量。 或者,理想情況下,您可以使用閉包來保護用戶ID的值,以免使用javascript控制台重置它,而不是使用全局變量。
同步:調用addUser()時只需使用“ asysc”:false屬性,以便在設置用戶id屬性之前不調用setpersonalinfo()。
嘗試以下操作:創建一個封裝用戶數據處理的閉包,然后將返回的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();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.