我有一个AJAX调用函数,如下所示:
$(function AddItemsToCart() {
$('#AddToCartBtn').click(function () {
var cartData = new Array();
if ($("#PartsTable> tr").length > 0) {
var popupMsgTxt = '';
var counter = 0;
$('#PartsTable').find('tr').each(function () {
var row = $(this);
if (row.find('input[type="checkbox"]').is(':checked')) {
var cartDataInfo = new Object();
var $tds = $(this).find('td');
cartDataInfo["CustomerReference"] = $tds.eq(0).find('div').text();
cartDataInfo["Quantity"] = $tds.eq(2).find('div').text();
var $hidden_fields = $(this).find('input:hidden');
cartDataInfo["ItemID"] = $hidden_fields.eq(1).val();
cartDataInfo["ItemCode"] = $hidden_fields.eq(0).val();
popupMsgTxt = $tds.eq(0).find('div').text();
cartData[counter] = cartDataInfo;
counter = counter + 1;
}
});
var cartDataArray = { 'cartData': cartData };
var fleetGuid;
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "OrderFormServices.asmx/AddItemsToCart",
data: JSON.stringify(cartDataArray),
dataType: "json",
success: function (result) {
fleetGuid = result.d;
console.log(fleetGuid);
}
});
var items = [], options = [];
//Iterate all td's in first column
$('#PartsTable tr td:nth-child(1)').each(function () {
items.push($(this).text());
});
//restrict array to unique fleet numbers
items = $.unique(items);
//iterate unique array and build array of select options
$.each(items, function(i, item) {
//// THIS IS WHERE I AM GETTING THE 'UNDEFINED' ERROR ////
options.push('<tr><td align="left" valign="top">' + item + '</td><input type="hidden" name="GUID" value="'+ fleetGuid +'"><td class="delete" align="center" style="background-color: transparent;"><i class="fa fa-times text-red cur-pon"></i></td></tr>');
});
//finally empty the select and append the items from the array
$('#OrderSummaryTbody').append(options.join());
$("#PopupInnerTextModel").text(popupMsgTxt);
$("#popup").fadeIn(750).delay(1750).fadeOut(500);
}
});
});
响应成功登录我的控制台日志,如下所示
然而,当我尝试使用变量&#39; fleetGuid&#39;在函数中(您将在上面的代码中看到注释),它返回undefined。这可能是因为从服务器获得响应有延迟吗?
任何人都可以放弃任何光明吗?
答案 0 :(得分:1)
是的,它是正确的,因为success
的{{1}}函数被称为字母,当它从服务器得到响应时调用,并且在你得到之前使用了ajax
回复,
var
以下操作正确...
快乐编码!!!
答案 1 :(得分:1)
在你的ajax调用的成功函数中执行你的逻辑
$(function AddItemsToCart() {
$('#AddToCartBtn').click(function () {
var cartData = new Array();
if ($("#PartsTable> tr").length > 0) {
var popupMsgTxt = '';
var counter = 0;
$('#PartsTable').find('tr').each(function () {
var row = $(this);
if (row.find('input[type="checkbox"]').is(':checked')) {
var cartDataInfo = new Object();
var $tds = $(this).find('td');
cartDataInfo["CustomerReference"] = $tds.eq(0).find('div').text();
cartDataInfo["Quantity"] = $tds.eq(2).find('div').text();
var $hidden_fields = $(this).find('input:hidden');
cartDataInfo["ItemID"] = $hidden_fields.eq(1).val();
cartDataInfo["ItemCode"] = $hidden_fields.eq(0).val();
popupMsgTxt = $tds.eq(0).find('div').text();
cartData[counter] = cartDataInfo;
counter = counter + 1;
}
});
var cartDataArray = { 'cartData': cartData };
var fleetGuid;
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "OrderFormServices.asmx/AddItemsToCart",
data: JSON.stringify(cartDataArray),
dataType: "json",
success: function (result) {
fleetGuid = result.d;
var items = [], options = [];
//Iterate all td's in first column
$('#PartsTable tr td:nth-child(1)').each(function () {
items.push($(this).text());
});
//restrict array to unique fleet numbers
items = $.unique(items);
//iterate unique array and build array of select options
$.each(items, function(i, item) {
//// THIS IS WHERE I AM GETTING THE 'UNDEFINED' ERROR ////
options.push('<tr><td align="left" valign="top">' + item + '</td><input type="hidden" name="GUID" value="'+ fleetGuid +'"><td class="delete" align="center" style="background-color: transparent;"><i class="fa fa-times text-red cur-pon"></i></td></tr>');
});
//finally empty the select and append the items from the array
$('#OrderSummaryTbody').append(options.join());
$("#PopupInnerTextModel").text(popupMsgTxt);
$("#popup").fadeIn(750).delay(1750).fadeOut(500);
}
});
}
});
});