将ajax数据传递给另一个函数

时间:2016-12-16 08:58:27

标签: javascript

我想在此处应用getStatus功能:

function getStatus(id)
{
    $.ajax({
        method: "POST",
        url: '<?php echo base_url('marketplace/get_store_status'); ?>/'+id,
        dataType: 'json',
        success: function(data){
            return data.status;
        }
    });
}

在这里进入这个功能:

$('#store-status').click(function() {
    var id = getStatus(<?php echo $vendor->store_id; ?>);
    if (id == 1) {
    $('#btn-status')
        .removeClass('btn-danger')
        .addClass('btn-primary')
        .text('Activate');
    } else {
        $('#btn-status')
        .removeClass('btn-primary')
        .addClass('btn-danger')
        .text('Deactivate');
    }
    console.log(id);
    $('#modal-status').modal('show');
});

但是当我将元素点击功能中的id变量记录到控制台时,它会显示undefined

但是当我从getStatus函数本身记录成功数据时,它会显示正确的数据。我的代码中我做错了什么?

2 个答案:

答案 0 :(得分:2)

Ajax调用是异步的。你需要传递一个回调。

你也可以让它同步,但这会延误你的页面,如果通话需要更长时间会导致问题

function getStatus(id, callback)
{
    $.ajax({
        method: "POST",
        url: '<?php echo base_url('marketplace/get_store_status'); ?>/'+id,
        dataType: 'json',
        success: function(data){
            callback && callback(data.status);
        }
    });
}


$('#store-status').click(function() {
    var id = getStatus(<?php echo $vendor->store_id; ?>, function(id), {
   // the code here
});

});

答案 1 :(得分:0)

问题是var id = getStatus(<?php echo $vendor->store_id; ?>);之后的代码在没有等待响应的情况下运行,因为您进行了异步调用。 一种解决方案是将async设置为false以使呼叫同步,但不建议这样做。

$.ajax({
    method: "POST",
    async: false,
    url: '<?php echo base_url('marketplace/get_store_status'); ?>/'+id,
    dataType: 'json',
    success: function(data){
        return data.status;
    }
});

另一个更好的解决方案是使用回调函数。