Javascript jQuery在第一个函数之后完成一个函数

Javascript jQuery在第一个函数之后完成一个函数,javascript,jquery,Javascript,Jquery,我有两个选择框。在2个选择框中选择选项之后,我需要将带有输入的行添加到表中,并且只有在将行添加到表中之后,我才需要运行ajax查询,以使用相关数据填充每个输入。 这是我的密码: $("#items, #sites").change(function () { var itemsCount = $('#items option:selected').length; var sitesCount = $('#sites option:selected').length; if

我有两个选择框。在2个选择框中选择选项之后,我需要将带有输入的行添加到表中,并且只有在将行添加到表中之后,我才需要运行ajax查询,以使用相关数据填充每个输入。 这是我的密码:

$("#items, #sites").change(function () {
    var itemsCount = $('#items option:selected').length;
    var sitesCount = $('#sites option:selected').length;
    if (sitesCount > 0 && itemsCount > 0){
        popTable(itemsCount, sitesCount);
        getZicouiData();
    }
});

function popTable(itemsCount, sitesCount){
    $('#cutbacks > tbody').empty();
    var row = '';
    $('#items option:selected').each(function(){
        var item_id = $(this).val();
        row +='<tr>';
        row += '<td rowspan="'+sitesCount+'">'+$(this).text()+'</td>';
        var site_i = 0;
        $('#sites option:selected').each(function(){
            var site_id = $(this).val();
            if(site_i != 0){
                row +='<tr>';
            }
            row += '<td>'+$(this).text()+'</td><td><input type="text" class="form-control waiting" data-site-id="'+site_id+'" data-item-id="'+item_id+'" value="מעדכן נתונים"/></td>';
            row += '</tr>';
            site_i ++
        });
    });
    $('#cutbacks > tbody').append(row);
}
function getZicouiData(){
    $('.waiting').each(function(){
        var item_id = $(this).attr('data-item-id');
        var site_id = $(this).attr('data-site-id');
        url = '{{url('/')}}/sales/item_by_sale/'+item_id+'/'+site_id;
        ordered_items = $.getData(url).total;
        $(this).val(ordered_items);
    });
}
jQuery.extend
(
    {
        getData: function(url)
        {
            var result = null;
            $.ajax(
                {
                    url: url,
                    type: 'get',
                    dataType: 'json',
                    async: false,
                    cache: false,
                    success: function(data)
                    {
                        result = data;
                    }
                }
            );
           return result;
        }
    }
);
$(“#项目,#站点”)。更改(功能(){
var itemscont=$(“#项选项:选定”)。长度;
var SiteScont=$(“#站点选项:选定”)。长度;
如果(SiteScont>0&&ItemScont>0){
popTable(ItemScont、SiteScont);
getZicouiData();
}
});
函数popTable(ItemScont、SiteScont){
$(“#缩减>tbody”).empty();
var行=“”;
$(“#项选项:选定”)。每个(函数(){
var item_id=$(this.val();
行+='';
行+=''+$(this).text()+'';
var-site_i=0;
$(“#站点选项:选定”)。每个(函数(){
var site_id=$(this.val();
如果(站点i!=0){
行+='';
}
行+=''+$(this).text()+'';
行+='';
地点(i)++
});
});
$(“#缩减>tbody”)。追加(行);
}
函数getZicouiData(){
$('.waiting')。每个(函数(){
var item_id=$(this.attr('data-item-id');
var site_id=$(this.attr('data-site-id');
url={{url('/')}/sales/item_by_sale/'+item_id+'/'+site_id;
ordered_items=$.getData(url).total;
$(this).val(订购的物品);
});
}
jQuery.extend
(
{
getData:函数(url)
{
var结果=null;
$.ajax(
{
url:url,
键入:“get”,
数据类型:“json”,
async:false,
cache:false,
成功:功能(数据)
{
结果=数据;
}
}
);
返回结果;
}
}
);
这里是我的html:

<select id='items' class='items' multiple>
    <option value='1'>1</option>
    <option value='2'>2</option>
    <option value='3'>3</option>
</select>
<select id='sites' class='sites' multiple>
    <option value='1'>1</option>
    <option value='2'>2</option>
    <option value='3'>3</option>
</select>
<table id='cutbacks' class='table'>
    <tbody></tbody>
</table>

1.
2.
3.
1.
2.
3.
我的问题是,在两个函数都完成之前,我的表是空的


怎么了?

多亏了@jfriend00,我找到了解决方案:

这里是固定代码:

function getZicouiData(){
    $('.waiting').each(function(){
        var item_id = $(this).attr('data-item-id');
        var site_id = $(this).attr('data-site-id');
        var $this = $(this);
        url = '{{url('/')}}/sales/item_by_sale/'+item_id+'/'+site_id;
        $.ajax(
            {
                url: url,
                type: 'get',
                dataType: 'json',
                // async: false,
                cache: false,
                success: function(data)
                {
                    $this.val(data.total);
                }
            }
        );
    });
}

我的错误是因为ajax不同步。

您的方法很好,代码也很好。这是我用你的代码构建的小提琴。我没有发现任何问题。
$.getData()
做什么?是同步还是异步?@jfriend00你说得对。我已经更新了这个问题。@Praveen,我知道它正在工作,但getData()需要时间,所有内容都会同时返回,而不是首先返回表,然后返回输入。您需要阅读以下内容:。您的
getData()
函数不工作。它不会返回结果。