对于从AJAX返回的每个直通列表,使用JavaScript获取

对于从AJAX返回的每个直通列表,使用JavaScript获取,javascript,ajax,Javascript,Ajax,问题是正如标题所描述的。。。我试图循环遍历字符串列表中的值,并在页面上提醒它们。不幸的是,我一直得到一个错误 未捕获类型错误:response.forEach不是函数 我已经阅读了其他一些关于javascript中for循环的地方,但它似乎可以与数组一起工作。说到JavaScript,我会说我是个新手。。。那么JavaScript中是否有一个等价的.ToArray方法?我已经编写了一个简单的应用程序来展示我想要实现的目标 注意:我无法更改控制器方法GetStringList的返回类型。在较大的应

问题是正如标题所描述的。。。我试图循环遍历字符串列表中的值,并在页面上提醒它们。不幸的是,我一直得到一个错误

未捕获类型错误:response.forEach不是函数

我已经阅读了其他一些关于javascript中for循环的地方,但它似乎可以与数组一起工作。说到JavaScript,我会说我是个新手。。。那么JavaScript中是否有一个等价的.ToArray方法?我已经编写了一个简单的应用程序来展示我想要实现的目标

注意:我无法更改控制器方法GetStringList的返回类型。在较大的应用程序中,该方法必须返回字符串列表

控制器方法C

视图/JavaScript函数

请让我知道,如果任何澄清需要作出-谢谢

.forEach是一种数组方法。response是XMLHttpRequest响应字符串。因为JavaScript中没有列表类型,所以只有一个大字符串

如果您使用var myArray=JSON.parseresponse接收到的是一个数组,那么您应该尝试将该字符串解析为一个数组,然后就可以在myArray上调用.forEach

您是否记录了响应以查看得到的确切语法?

您不能只返回ListOfstring,因为它只会打印类似System.Collections.Generic.List 1[System.String]的内容

因此,您应该将代码更改为:

return string.Join(",",listOfStrings);
但是,由于您希望使用Javascript遍历它,我建议将其作为JSON返回,这样做:

using Newtonsoft.Json;
...
return JsonConvert.SerializeObject(listOfStrings);
这样,您将得到一个类似以下内容的字符串:

["string1","string2","string3"]
现在,您可以更改jQuery,使其需要JSON:

$.ajax({
  type: 'GET',
  dataType: 'json', //So your response will be parsed and ready to use as a Javascript object
  url: '/Home/GetStringList',
  success: function (response) {
    response.forEach(function (item) {
      alert(item);
    });
  }
});
如果您绝对不想更改函数的return语句,则有两个选项:

使用一个可选参数,这样您就可以知道何时需要JSON
我有。。。我得到了System.Collections.Generic.List`1[System.String]。当我尝试获取值时,它表示未定义。您从记录响应的JavaScript获取System.Collections.Generic.List1[System.String]?正确-我在成功函数之后执行了alertresponse,它向System.Collections.Generic.List1[System.String]发出了警报。我是不是误解了你所说的日志?谢谢您的帮助,顺便说一句。在浏览器中,按F12。这将打开开发人员工具。单击标记为Console的选项卡。每当您需要知道某个东西的价值时,就编写console.logsomething,您将在这里看到它。如果单击“网络”选项卡,您可以看到您的请求和响应。您看到的是.NET类型而不是实际值这一事实告诉我,您的WebMethod没有返回正确的数据。是的,它仍然返回相同的结果。当我将GetStringList方法更改为返回JsonResult并将方法更改为返回JsonlistOfStrings时,JsonRequestBehavior.AllowGet。。。然后它将我想要的信息记录在控制台中。但是,我想返回一个列表。只是为了澄清你在说什么。。。除了在GetStringsList控制器方法中更改我的return语句之外,没有其他方法了?我不想更改return语句,因为“控制器”中的其他内容依赖于此方法返回列表。我想创建一个完全独立的方法来做你描述的事情。。。但是我复制了代码过程,我想知道是否有办法通过将C列表返回到javascript并将其转换为客户端上的数组来避免这种情况。是的,你是对的。我编辑我的答案是为了给你两种方法来改变返回声明,而不损害其他东西,所以这是一种不可避免的情况。非常感谢你澄清这一点,并提供了各种各样的例子。我已经实现了它,它正在按预期工作。
["string1","string2","string3"]
$.ajax({
  type: 'GET',
  dataType: 'json', //So your response will be parsed and ready to use as a Javascript object
  url: '/Home/GetStringList',
  success: function (response) {
    response.forEach(function (item) {
      alert(item);
    });
  }
});
public List<string> GetStringList(bool json = False){
  ...
  if(json){
    return JsonConvert.SerializeObject(listOfStrings);
  }
  return listOfStrings;
}
public string GetStringListAsJSON(){
  return JsonConvert.SerializeObject(GetStringList());
}