2012-06-17 64 views
2

我的JavaScript代碼一些這樣的事 -的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; ?>'; 

它工作的一些事情。有人能指出這個問題嗎?

感謝

+3

你知道PHP在哪裏運行,以及Javascript在哪裏運行?請解釋您的「javascript代碼」的傳遞方式,而不僅僅是它包含的內容。 – mario

+0

另外,請定義「不起作用」。這兩者都應該有效,但結果卻截然不同。 'pl.push(10)'產生'[undefined,undefined,undefined,10]';而'pl [0] = 10'導致'[10,undefined,undefined]'。 – Amadan

回答

8

通過使用Array構造您創建了一些已經定義的「槽」的數組。在你的情況下,陣列都具有3個元素,當你創建它們(每個元素的值是undefined

當您使用push,你一個額外元素添加到陣列。在特定索引處設置元素時,只需設置該元素的值即可。

我不會使用Array構造函數,而不是創建數組文本建議:

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

這個時候,陣列沒有元素創建的,所以,當使用push你正在推動一個元素索引0 ,而不是4

+1

+1,這是正確的答案寫同樣的。 – Sarfraz

+0

謝謝您提供的解釋。我的代碼工作.. :) – Fox

+0

@狐狸 - 不客氣,很高興我可以幫助:) –

2

試試這個:

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

謝謝你指出錯誤! – Fox

1

new Array(count)創建了length設置爲count,但沒有指標設置新Array對象。當您打印陣列時,您會得到array.lengthundefined。現在,

array.push(value); 

相同

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

new Array(3)之後將設置元件編號3(第四元件);

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.length爲3。


但是你的PHP代碼有一個嚴重的缺陷,可以破壞你的網站,並使用它的用戶兩者的安全性。如果$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,因爲這些都是proper JSON but not proper JavaScriptjson_encode似乎確實將它們編碼爲\u2028\u2029,這是安全的。