如何从WebService调用响应在JavaScript中动态初始化数组
我试图从WebService asmx响应中用JavaScript初始化一个数组,但由于某些原因,它似乎不起作用。调用是从html页面进行的。我使用的是另一篇文章中的inArray示例,如果我以以下任一方式静态声明数组,则效果良好:如何从WebService调用响应在JavaScript中动态初始化数组,javascript,arrays,Javascript,Arrays,我试图从WebService asmx响应中用JavaScript初始化一个数组,但由于某些原因,它似乎不起作用。调用是从html页面进行的。我使用的是另一篇文章中的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
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;
}
您可能应该使用JSON对Web服务给出的响应进行编码,然后将其解析为javascript数组。这是做这件事最简单明智的方法 但也许这会管用
var unavailableDates = JSON.parse(response);
您在这里几乎没有选择: 1最佳选项IMHO:调整web方法以返回JSON编码的数组。然后按照@James的建议使用JSON.parse。为了做到这一点,您必须重写GetReservationInfo以返回数组而不是字符串,并且它将自动进行JSON编码,但我在这里可能错了 2您当前的webmethod返回以逗号分隔的字符串,并引用日期字符串。在JS端,看起来是这样的:\26-3-2019\,\25-3-2019\,\24-3-2019\。因此,为了获得字符串数组,必须执行以下操作: JSON.parse[+prohibitOrderDates+] 3调整webmethod以返回不带引号的日期,例如不使用\。然后使用prohibitOrderDates.split','
希望有帮助。您的回复是什么格式的?您如何返回回复,请发布Web服务的代码?@James-string.webservice的方法体addedhanks!我尝试了包含响应的JSON.parse,但由于某种原因,它不起作用,所以我删除了转义的引号,并按照建议使用了split函数,它起了作用。我相信JSON解析函数可能也能工作,但我认为需要更多的代码mod才能更恰当地返回响应,以使用该方法。分割函数在没有太多mod的情况下很快就完成了任务。我将使用JSON编码前进。谢谢你们!