我正在尝试从WebService(asmx)响应中使用JavaScript初始化数组,但是由于某种原因,它似乎无法正常工作。调用是从html页面进行的。我正在使用另一则SO帖子中的inArray示例,如果我以以下任何一种方式静态声明该数组,则可以正常工作:
var unavailableDates = new Array("26-3-2019", "25-3-2019", "24-3-2019");
var unavailableDates = ["26-3-2019", "25-3-2019", "24-3-2019"];
但是,当我构造具有相同格式的字符串并从WebService调用返回它时,检查innerHTML可以清楚地看到它具有相同的格式,但是inArray方法每次都无法识别数组中的值。
$.get(hostUri, {}, function (response) {
var prohibitOrderDates = response.documentElement.innerHTML;
// innerHTML returns "26-3-2019", "25-3-2019", "24-3-2019"
var unavailableDates = new Array(prohibitOrderDates);
function unavailable(date) {
dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear();
if ($.inArray(dmy, unavailableDates) === -1) {
return [true, ""];
} else {
return [false, "", "Unavailable"];
}
}
}).error(function (err) {
// for debugging only
alert(err);
});
我想念什么?
这是我的WebService方法,我尝试过对其进行多种变体,包括返回一个字符串数组和一个通用字符串列表,但结果始终相同。
[WebMethod]
public string GetReservationInfo(string resvNo)
{
int reservationNo = 0;
int x = 0;
int.TryParse(resvNo, out reservationNo);
try
{
var blockedOrderDays = 4;
var blockedDay = String.Empty;
var noOrderDays = String.Empty;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var svclient = new Marketing.Marketing_10600020PortTypeClient();
var result = svclient.GetReservation(reservationNo);
var details = result.Reservation.ArrivalDate;
var arrivalDt = formatDate(details);
while(blockedOrderDays != 0)
{
blockedDay = formatDate(details.AddDays(-blockedOrderDays));
noOrderDays += blockedDay + "\"," + "\"";
-- blockedOrderDays;
}
noOrderDays = noOrderDays + arrivalDt;
return noOrderDays;
}
catch
{
return "notonfile";
}
}
public static string formatDate(DateTime date)
{
var month = date.Month.ToString();
var day = date.Day.ToString();
var year = date.Year.ToString();
return day + "-" + month + "-" + year;
}
答案 0 :(得分:1)
您可能应该使用JSON来编码Web服务给出的响应,然后将其解析为javascript数组。这是最简单明智的方法。
但是也许反正可以吗?
var unavailableDates = JSON.parse(response);
答案 1 :(得分:0)
您这里的选择很少:
1)最佳选择恕我直言:调整网络方法以返回JSON编码的数组。然后按照@James的建议使用JSON.parse。为此,您将不得不重写GetReservationInfo以返回数组而不是字符串,并且该数组将自动进行JSON编码,但是在这里我可能是错的。
2)您当前的web方法返回以逗号分隔的字符串,并用引号引起来的日期字符串。在JS端,它看起来像这样:“ \” 26-3-2019 \“,\” 25-3-2019 \“,\” 24-3-2019 \“”。因此,为了获得字符串数组,您必须执行以下操作:
JSON.parse(“ [” + disableOrderDates +“]”)
3)调整网络方法以返回不带引号的日期(例如,不要与\“连接)。然后使用禁止订单日期.split(',');
希望有帮助。