问题是标题所描述的......我试图遍历字符串列表中的值并在页面上提醒它们。不幸的是,我一直收到错误......
" 未捕获的TypeError:response.forEach不是函数"
我已经在其他几个地方读过关于javascript中的for循环,但似乎它适用于数组。我说我在JavaScript方面是一个新手......那么在JavaScript中是否存在等效的.ToArray()方法?我写了一个简单的应用程序来展示我试图完成的是什么。
注意:我无法更改控制器方法的返回类型" GetStringList"。在较大的应用程序中,该方法必须返回字符串列表。
控制器方法(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>
如果需要澄清,请告诉我 - 谢谢!
答案 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语句,则有两个选项:
public List<string> GetStringList(bool json = False){
...
if(json){
return JsonConvert.SerializeObject(listOfStrings);
}
return listOfStrings;
}
public string GetStringListAsJSON(){
return JsonConvert.SerializeObject(GetStringList());
}