Javascript 赢得的价值';由于ajax调用,无法在函数中更新
我正在编写一个javascript函数,它可以根据所选的案例更改明信片的视图 我的问题是对象“m_case”的旧值正在被使用。如果我按两次“case btn”类按钮,我会在明信片视图中选择正确的案例。但我想在我按下一次按钮时触发它 我想我必须在m_case.setCase()函数调用中执行回调函数之类的操作,但我无法让它工作Javascript 赢得的价值';由于ajax调用,无法在函数中更新,javascript,ajax,Javascript,Ajax,我正在编写一个javascript函数,它可以根据所选的案例更改明信片的视图 我的问题是对象“m_case”的旧值正在被使用。如果我按两次“case btn”类按钮,我会在明信片视图中选择正确的案例。但我想在我按下一次按钮时触发它 我想我必须在m_case.setCase()函数调用中执行回调函数之类的操作,但我无法让它工作 $('.case-btn').on('click', function() { remove_active_state_from_cases(); m_c
$('.case-btn').on('click', function() {
remove_active_state_from_cases();
m_case.setCase($(this).data('case'));
// Changes the view of the postcard
m_postcard.changeBackground(m_case.getPhoto());
m_postcard.changeMessage(m_case.getMessageText());
m_postcard.changeFullName(m_case.getFullName());
m_postcard.changeCountry(m_case.getCountry());
$(this).toggleClass('active');
});
setCase()函数
EDIT问题可能出在我的AJAX调用中,我必须等待AJAX被调用。但是,当我的Ajax完成时,而不是之前,我如何继续第一个流程呢
解决方案
我通过添加一个回调参数并在ajaxs complete函数中调用该函数使其正常工作
$('.case-btn').on('click', function() {
remove_active_state_from_cases();
var that = this;
m_case.setCase($(this).data('case'), function() {
m_postcard.changeBackground(m_case.getPhoto());
m_postcard.changeMessage(m_case.getMessageText());
m_postcard.changeFullName(m_case.getFullName());
m_postcard.changeCountry(m_case.getCountry());
$(that).toggleClass('active');
});
});
// Sets the whole case from an id.
this.setCase = function(id, callback) {
// Set ID
this.setID(id);
var that = this;
$.ajax({
url: 'get_case_by_id.php',
type: 'get',
dataType: 'json',
data: {id: that.getID() },
success: function(data) {
if(data.success) {
that.setFirstName(data.first_name);
that.setFullName(data.full_name);
that.setAdress(data.adress);
that.setCountry(data.country);
that.setStamp(data.stamp);
that.setPhoto(data.photo);
that.setSummary(data.summary);
that.setStory(data.story);
that.setMessageText(data.message_text);
that.setDefaultMessageText(data.default_message_text);
that.setMessageImg(data.message_img);
} else {
console.log('fail big time');
}
},
complete: function() {
callback();
}
});
}
您的
m_明信片.changeBackground
和其他调用应该在success
回调中,或者在从success回调调用的另一个函数中,因为这些值在异步ajax调用完成之前不会设置
按照您的代码现在是m_明信片的方式。在执行setCase
函数后,会立即调用changeBackground
和其他调用。这意味着您的方法是在数据从服务器到达之前执行的
当ajax正在处理时,您可能应该在屏幕上显示一条加载消息,让用户知道他们必须等待处理完成。在调用.ajax
调用之前显示消息,并将其隐藏在成功/错误回调中
对站点内容的任何更改都应该通过成功回调来完成,即更改
活动状态、更改内容等。谢谢您的回答,我通过添加一个回调函数作为参数并在ajaxes complete函数中调用该函数来实现,您对该答案有何看法?
$('.case-btn').on('click', function() {
remove_active_state_from_cases();
var that = this;
m_case.setCase($(this).data('case'), function() {
m_postcard.changeBackground(m_case.getPhoto());
m_postcard.changeMessage(m_case.getMessageText());
m_postcard.changeFullName(m_case.getFullName());
m_postcard.changeCountry(m_case.getCountry());
$(that).toggleClass('active');
});
});
// Sets the whole case from an id.
this.setCase = function(id, callback) {
// Set ID
this.setID(id);
var that = this;
$.ajax({
url: 'get_case_by_id.php',
type: 'get',
dataType: 'json',
data: {id: that.getID() },
success: function(data) {
if(data.success) {
that.setFirstName(data.first_name);
that.setFullName(data.full_name);
that.setAdress(data.adress);
that.setCountry(data.country);
that.setStamp(data.stamp);
that.setPhoto(data.photo);
that.setSummary(data.summary);
that.setStory(data.story);
that.setMessageText(data.message_text);
that.setDefaultMessageText(data.default_message_text);
that.setMessageImg(data.message_img);
} else {
console.log('fail big time');
}
},
complete: function() {
callback();
}
});
}