我正在进行ajax调用并从类似result = [one, two, three];
我需要将其转换为数组并迭代它。由于我的字符串没有引号,因此无法正确读取数组。
这是我的代码,如果你能告诉我正确的方法。感谢。
xmlhttp.open("POST","SearchServlet", true);
xmlhttp.onreadystatechange =
function(){
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
resultData = xmlhttp.responseText;
// resultData = [one, two, three];
// need to make valid array to iterate it
for (var i = 0; i < resultData.length; i++) {
console.log(resultData[i]);
}
}
};
答案 0 :(得分:1)
嗨&#34;用户&#34;欢迎来到SO。感谢代码示例和格式正确的问题:)
由于HTTP请求使用字符串(它们不发送数组),因此发送响应的最佳方式是JSON格式。然后,您可以轻松地将JSON字符串解析为数组。
http://www.copterlabs.com/blog/json-what-it-is-how-it-works-how-to-use-it/
JSON是一种非常容易使用(通常)的方式来发送字符串并将它们转储到数组中,反之亦然。
有ways to do it in Java(我假设它是服务器端代码的语言)和PHP(许多人也使用它)和其他所有语言。
出于某种原因,我记得Java的使用比它们应该更难使用,但希望我错了。无论哪种方式,它都不会太难学,并且肯定会将你的代码提升到一个新的水平。
使用原始字符串执行此操作的hack-y,不正确,丑陋的方法是:
// Remove first and last bracket
var data = resultData.substr(1, resultData.length - 2);
// Split the array
data = data.split(", ");
...但请不要这样做,这只是出于教育目的(冒着失败的风险)。我也没有对它进行过测试,但你明白了。
同样,最好的方法是改变你的设计,到处都使用JSON。
答案 1 :(得分:0)
理想情况下,您可以使用JSON.parse功能,但由于未引用one
,two
和three
,您必须做一些工作。
您可以浏览方括号中的每个项目,并在它们周围加上双引号,然后调用JSON.parse
。或者,按照Steve建议并重写服务器的处理程序以使用适当的JSON进行响应。
如果他们被引用,JSON.parse会像这样工作:
> JSON.parse('["one", "two", "three"]')
["one", "two", "three"]
答案 2 :(得分:0)
试试这个,它有点复杂,但它会起作用:
resultData = xmlhttp.responseText;
resultData = resultData.substring(1, resultData.length-1);
var resultArray = resultData.split(',');
答案 3 :(得分:0)
虽然我不确切地知道为什么你不能输出有效的JSON(在你的数组中带引号的字符串),但这个小而脏的函数可以通过引用和引用你的“几乎数组”来解析有效的JSON。删除空格,此函数返回一个真实的数组。
function validArray(str){
return str
.replace(/[\[\]']+/g,"")
.split(",")
.map(function(v){
return v.replace(/^\s\s*/g, '').replace(/\s\s*$/g, '');
});
}
最好的解决方案是避免这种解析并使用valid JSON进行响应。这样,您可以简单地执行JSON.parse并轻松获取JS对象。