在javascript中的ajax调用中将字符串转换为数组

时间:2013-05-21 03:04:35

标签: javascript ajax

我正在进行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]);
              }
        }
    };  

4 个答案:

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

...但请不要这样做,这只是出于教育目的(冒着失败的风险)。我也没有对它进行过测试,但你明白了。

同样,最好的方法是改变你的设计,到处都使用J​​SON。

答案 1 :(得分:0)

理想情况下,您可以使用JSON.parse功能,但由于未引用onetwothree,您必须做一些工作。

您可以浏览方括号中的每个项目,并在它们周围加上双引号,然后调用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对象。