Javascript jQuery在第一个函数之后完成一个函数
我有两个选择框。在2个选择框中选择选项之后,我需要将带有输入的行添加到表中,并且只有在将行添加到表中之后,我才需要运行ajax查询,以使用相关数据填充每个输入。 这是我的密码: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
$("#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()
函数不工作。它不会返回结果。