1

我正在进行 ajax 调用并从看起来像的数组中获取结果result = [one, two, three];

我需要将其转换为数组并对其进行迭代。由于我的字符串在 values 数组周围没有引号,因此无法正确读取。

这是我的代码,如果你能告诉我正确的方法。谢谢。

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

4 回答 4

1

嗨,“用户”,欢迎来到 SO。感谢您提供代码示例和格式正确的问题:)


由于 HTTP 请求使用字符串(它们不发送数组),因此发送响应的最佳方式是 JSON 格式。然后,您可以轻松地将 JSON 字符串解析为数组。

http://www.copterlabs.com/blog/json-what-it-is-how-it-works-how-to-use-it/

JSON 是一种非常易于使用(通常)的方式来发送字符串并将它们转储到数组中,反之亦然。

在 Java (我假设它是您的服务器端代码的语言)和 PHP(许多人也使用)和其他所有语言中都有办法做到这一点。

出于某种原因,我记得 Java 比它们应该的更难使用,但希望我弄错了。无论哪种方式,学习都不会太难,并且肯定会将您的 code-fu 提升到一个新的水平。


使用原始字符串的 hack-y、不正确、丑陋的方法是:

// Remove first and last bracket
var data = resultData.substr(1, resultData.length - 2);
// Split the array
data = data.split(", ");

...但请不要这样做,这仅用于教育目的(有被否决的风险)。我也没有测试过,但你明白了。

同样,最好的方法是更改​​您的设计以在任何地方使用 JSON。

于 2013-05-21T03:07:38.310 回答
0

试试这个,它有点复杂,但它会工作:

resultData = xmlhttp.responseText;
resultData = resultData.substring(1, resultData.length-1);
var resultArray = resultData.split(','); 
于 2013-05-21T03:11:44.307 回答
0

理想情况下,您将使用JSON.parse函数,但由于onetwothree没有被引用,您将不得不做一些工作。

您可以遍历方括号中的每个项目并在它们周围加上双引号,然后调用JSON.parse. 或者,按照 Steve 的建议执行并重写服务器的处理程序以使用正确的 JSON 进行响应。

如果它们被引用,JSON.parse 将像这样工作:

> JSON.parse('["one", "two", "three"]')
["one", "two", "three"]
于 2013-05-21T03:05:33.883 回答
0

虽然我不知道为什么你不能输出一个有效的 JSON(在你的数组中有引号的字符串),这个小而肮脏的函数可以通过添加引号和删除空格来将你的“几乎数组”解析为有效的,这个函数返回一个真实的数组。

function validArray(str){
  return str
         .replace(/[\[\]']+/g,"")
         .split(",")
         .map(function(v){ 
           return v.replace(/^\s\s*/g, '').replace(/\s\s*$/g, '');
         });
}

最好的解决方案是避免这种解析并使用有效的JSON 进行响应。这样,您可以简单地执行 JSON.parse 并轻松获取 JS 对象。

于 2013-05-21T03:21:32.687 回答