如何从WebService调用响应在JavaScript中动态初始化数组

如何从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

我试图从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"];
但是当我构造一个具有相同格式的字符串并从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编码前进。谢谢你们!