-1

PHP関数からJSON形式でデータを取得しています。

 var xhReq = new XMLHttpRequest();
 xhReq.open("GET", "http://myserver/getjson", false);
 xhReq.send(null);
 var serverResponse = xhReq;

var jsondata=eval("("+serverResponse.responseText+")") //retrieve result as an JavaScript object

 images="";

 for(var i=0; i<jsondata.length;i++)
 {
  images+="  ['"+jsondata[i].title+"','"+IMAGESROOT+"121a.png"+"']";


     if(i<jsondata.length-1)
        images+=",";
 }

このデータを次の形式で取得しています。

['title 1','http://site.com/images/121a.png'],
['title 2','http://site.com/images/121a.png'],
['title 3','http://site.com/images/121a.png'],
['title 4','http://site.com/images/121a.png']

最後に、eval() を使用してこのデータを配列として割り当てると、

var tinyMCEImageList = new Array(eval(images));

である配列の最後の要素のみを表示し['title 4','http://site.com/images/121a.png']ます。

配列のすべての要素を割り当てたい。

4

4 に答える 4

2

簡単な解決策は

var tinyMCEImageList = eval('['+serverResponse.responseText+']');

また

var tinyMCEImageList = JSON.parse(
    '['+serverResponse.responseText.replace(/'/g, '"')+']'
);

しかし、より良い解決策は、欠落している引用符を追加し、適切な引用符を使用してJSONを生成することです。これにより、直接使用できるようになります。PHP には、JSON を生成するためのすべてのツールが標準で付属していることに注意してください。[]JSON.parse

于 2013-03-18T08:49:55.243 に答える
0

JavaScript では、中括弧(), は次の 2 つのいずれかを意味します。

  1. 関数の最後に、関数呼び出しをトリガーします。

  2. 式では、演算子の優先順位をオーバーライドします。

したがって、評価しようとしているのは式であるため、2 番が発生しているように見えます。上記の 2 つの意味は、中括弧が JavaScript で行う唯一のことであることに注意してください。たとえば Perl のように、中括弧をグループ化またはリスト演算子として使用することはできません。

次に、コンマ演算子に遭遇します。JavaScript では、カンマ、,、 は次の 4 つのいずれかを意味します。

  1. 関数呼び出しでは、関数に渡される引数をカンマで区切ります。

  2. 配列リテラルでは、カンマで配列メンバーを区切ります。

  3. オブジェクト リテラルでは、コンマでオブジェクト メンバーを区切ります。

  4. 式では、コンマはコンマ演算子です。

コンマ演算子とは何ですか?コンマ演算子は、2 つの式を取り、両方を評価して 2 番目の式を返す演算子です。X、Y、Z の 3 つの式があるとします。次の行は次のとおりです。

X, Y, Z

JavaScript では、基本的に次と同じです。

(X , Y) , Z

もちろん、上記の式は最初に X を評価し、次に Y を評価し、次に結果として Y を返し、次に Y、次に Z を返し、結果として Z を返します。

つまり、動作番号 4: コンマ演算子として機能するコンマです。

代わりに意図しているのは、動作番号2であると思われます。カンマが配列セパレータとして機能するためです。もしそうなら、あなたが評価している文字列は間違っています。そのはず:

"[" + your_string + "]"

これは、受信しているデータが JSON ではない (または無効な JSON) ことを意味します。上記を実行して非 JSON 文字列を JavaScript で解析することで、これを修正できます。または、php で上記を実行して、データを有効な JSON にして、JavaScript コードが正しく機能するようにすることもできます。

于 2013-03-18T09:00:45.297 に答える
0

これを試して

 var tinyMCEImageList = new Array();
 for(var i=0; i<jsondata.length;i++)
{
  images+="  ['"+jsondata[i].title+"','"+IMAGESROOT+"121a.png"+"']";


 if(i<jsondata.length-1)
    images+=",";

     tinyMCEImageList[]=images
}
于 2013-03-18T08:49:59.990 に答える
0

これを試して:

var jsondata=eval("(["+serverResponse.responseText+"])") //retrieve result ..

4 つの要素には配列のカプセル化がなく、最後の要素は代入されるだけです。

于 2013-03-18T08:50:44.877 に答える