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

时间:2019-03-21 17:18:59

标签: javascript arrays

我正在尝试从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;
}

2 个答案:

答案 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(',');

希望有帮助。