对于JavaScript中的AJAX GET返回的每个List <string>

时间:2017-07-07 15:30:48

标签: javascript ajax

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

  

&#34; 未捕获的TypeError:response.forEach不是函数&#34;

我已经在其他几个地方读过关于javascript中的for循环,但似乎它适用于数组。我说我在JavaScript方面是一个新手......那么在JavaScript中是否存在等效的.ToArray()方法?我写了一个简单的应用程序来展示我试图完成的是什么。

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

控制器方法(C#)

    public List<string> GetStringList(){
        List<string> listOfStrings = new List<string>();

        SqlConnection sqlConn = new SqlConnection(connection_String);

        sqlConn.Open();

        string sqlStr = "SELECT * FROM dbo.[SampleOrders] WHERE Active = 1";
        SqlCommand sqlCmd = new SqlCommand(sqlStr, sqlConn);
        SqlDataReader sqlDR = sqlCmd.ExecuteReader();

        if (sqlDR.HasRows) {
            while (sqlDR.Read()) {
                listOfStrings.Add((string)sqlDR["SalesOrder"]);
            }
        }

        sqlDR.Close();
        sqlCmd.Dispose();
        sqlConn.Close();

        return listOfStrings;
    }

查看/ JavaScript功能

    <script>
        $(document).ready(function () {
            $('#demoBtn').click(function () {
                $.ajax({
                    type: 'GET',
                    url: '/Home/GetStringList',
                    success: function (response) {
                        response.forEach(function (item) {
                            alert(item);
                        });
                    }
                });
            });
        });
    </script>

如果需要澄清,请告诉我 - 谢谢!

2 个答案:

答案 0 :(得分:2)

.forEach()是一种数组方法。 response是XMLHttpRequest响应字符串。由于JavaScript中没有List<String>类型,因此您只需要一个大字符串。

您应该尝试使用var myArray = JSON.parse(response)将该字符串解析为数组(如果这是您已收到的结构),然后您就可以调用.forEach()myArray

您是否实际登录response以查看您获得的确切语法?

答案 1 :(得分:1)

您不能只返回listOfStrings,因为它只会打印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
public List<string> GetStringList(bool json = False){
  ...
  if(json){
    return JsonConvert.SerializeObject(listOfStrings);
  }
  return listOfStrings;
}
  • 创建另一个包装返回的方法,如下所示:
public string GetStringListAsJSON(){
  return JsonConvert.SerializeObject(GetStringList());
}