Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 赢得的价值';由于ajax调用,无法在函数中更新_Javascript_Ajax - Fatal编程技术网

Javascript 赢得的价值';由于ajax调用,无法在函数中更新

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

我正在编写一个javascript函数,它可以根据所选的案例更改明信片的视图

我的问题是对象“m_case”的旧值正在被使用。如果我按两次“case btn”类按钮,我会在明信片视图中选择正确的案例。但我想在我按下一次按钮时触发它

我想我必须在m_case.setCase()函数调用中执行回调函数之类的操作,但我无法让它工作

$('.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();
        }
    });
}