我有JavaScript执行ajax,如下所示
function format(ID) {
//alert(d);
var _row_Detail = '';
$.ajax({
url: '@Url.Action("Select_Detail")',
data: { iID: ID},
success: function (data) {
$.each(data, function (i, items) {
_row_Detail +=
'<tr>' +
'<td class="col-md-1" valign="top"><b>Month</b></td>' +
'<td>' + items.month_Name + '</td > ' +
'</tr>' +
'<tr>' +
'<td></td>' +
'<td valign="top">' +
'<table cellpadding="5" valign="top" cellspacing="0" border="0" style="padding-left:350px;">' +
'<tr>' +
'<td class="col-md-2" valign="top"> <b>Monthly Desc </b></td>' +
'<td>' + items.monthly_Desc + '</td>' +
'</tr>' +
'<tr >' +
'<th>Parameter</th>' +
'<th style="text-align:center">Note</th>' +
'</tr>' +
'<tr>' +
'<td class="col-md-2" valign="top"><b>Param 1</b></td>' +
'<td><b>' + items.param_1 + '</b>, ' + items.desc_1 + '</td>' +
'</tr>' +
'</table>' +
'</td > ' +
'</tr>'
});
_row_Detail = '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:150px;">' + _row_Detail + '</table>'
}
});
//alert (_row_Detail);
return _row_Detail
}
上面的代码在返回值之前都可以正常工作。返回的“ _row_Detail ”始终为空。我不知道为什么?但是,当我在网络监视器(Firefox,调试模式)中签入时,查询总是从ajax返回值。无论是单行还是多行。
我尝试通过在警报处设置断点来确定' _row_Detail '的值为 no ,但返回值为<< strong> _row_Detail 。 / p>
但是,当警报变为命令时,它将显示空白弹出窗口,但返回值没有这些值。我认为,这是因为ajax执行后,在循环中缺少对' _row_detail '变量的赋值。
然后,我尝试进行一些延迟,并在没有警报的情况下发送值控制台。
console.log('console 1:' +_row_Detail);
console.log('console 2:' + _row_Detail);
setTimeout(DelayMe(), 1000); //empty function
console.log('console 3:' + _row_Detail);
console.log('console 4:' + _row_Detail);
setTimeout(DelayMe(), 1000); //empty function
console.log('console 5:' + _row_Detail);
console.log('console 6:' + _row_Detail);
但控制台为空,并返回' _row_Detail '为空。
到目前为止,我只能通过在返回“ _row_Detail ”之前给出警告弹出窗口来解决上述空返回值。虽然为空,但是返回函数具有价值。
为什么会这样?