1

私は 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

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 のものは必要以上に使いづらかったことを思い出しますが、間違っていることを願っています。いずれにせよ、習得するのはそれほど難しくなく、あなたのコードフーを確実に次のレベルに引き上げます.


生の文字列を使用してそれを行うハックで、正しくない、醜い方法は次のとおりです。

// 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関数を使用しますが、onetwo、およびthreeは引用符で囲まれていないため、いくつかの作業を行う必要があります。

角括弧内の各項目を実行し、それらを二重引用符で囲んでから、 を呼び出すことができます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 に答える