2

私はjavascriptコードにこのようなものを持っています-

var count=3;
var pl=new Array(count);
var il=new Array(count); 

pl.push('<?php echo $var1; ?>');
il.push('<?php echo $var2; ?>');

なぜこれが機能しないのですか?

でもこういうことをやってみると

pl[0]='<?php echo $var1; ?>';

できます。誰かが問題を指摘できますか?

ありがとう

4

3 に答える 3

8

コンストラクターを使用するArrayと、いくつかの「スロット」がすでに定義されている配列を作成していることになります。あなたの場合、それらを作成するとき、配列は両方とも3つの要素を持っています(各要素の値はundefinedです)。

を使用する場合は、その配列に要素をpush追加します特定のインデックスに要素を設定するときは、その要素の値を設定するだけです。

Arrayコンストラクターを使用せず、代わりに配列リテラルを作成することをお勧めします。

var pl = [];
var il = [];
pl.push('<?php echo $var1; ?>');
il.push('<?php echo $var2; ?>');

今回は、配列は要素なしで作成されるため、使用するpush場合は、要素を4ではなくインデックス0にプッシュします。

于 2012-06-17T19:58:33.760 に答える
2

これを試して:

var pl=[];
var il=[]; 
pl.push('<?php echo $var1; ?>');
il.push('<?php echo $var2; ?>');
于 2012-06-17T19:58:10.593 に答える
1

はに設定されnew Array(count)た新しいArrayオブジェクトを作成しますが、インデックスは設定されていません。配列を出力すると、時間が得られます。今、lengthcountarray.lengthundefined

array.push(value);

と同じです

array[array.length] = value;
array.length ++;

その後new Array(3)、要素番号3(4番目の要素)を設定します。

pl[0] = '<?php echo $var1; ?>';
pl[1] = '<?php echo $var2; ?>';
pl[2] = '<?php echo $var3; ?>';

「正しく」機能します。それは期待通りです。ただし、配列の長さを初期化する必要はありません。やってさえ

var pl = [];
pl[0] = 1;
pl[1] = 2;
pl[2] = 3;

それでも、はpl.length3になります。


ただし、PHPコードには重大な欠陥があり、Webサイトとそれを使用するユーザーの両方のセキュリティを損なう可能性があります。$var1キャラクターが含まれている場合'(ユーザーからのものであるか、誤って挿入したため)、足を撃ちます-次のよう$var1に設定されている場合は次のようになります。

$var1 = "'; $.ajax('/user/delete', { method: 'post' }); '"

どうぞよろしくお願いします。json_encode代わりに関数を使用して、値を適切に引用してください。

var pl = [],
    il = []; 
pl.push(<?php echo json_encode($var1); ?>);
il.push(<?php echo json_encode($var2); ?>);

json_encodeまたは、を使用して配列を簡単に作成できることに注意してください。

var pl = <?php echo json_encode(array(1, 'a', 'b', 5.7)) ?>;

これにより、JavaScriptコードが生成されます。

var pl = [1,"a","b",5.7];

Unicode文字U+2028およびU+2029は適切なJSONですが、適切なJavaScriptではないため、注意する必要があります。それらを安全json_encodeにエンコードしているようです。\u2028\u2029

于 2012-06-17T20:56:08.937 に答える