2010-01-26 72 views
2

我想發送一個JavaScript陣列使用jquery AJAX到PHP。JavaScript數組到PHP

$.post("controllers/ajaxcalls/users.php", 
{ 
    links: links 
}); 

其中第二個'links'是一個javascript數組。

當我得到這個數組:

'1' ... 
    '1' => "comment1" 
    '2' => "link1" 
    '3' => "link2" 
    '4' => "link3" 
'2' ... 
    '1' => "comment2" 
    '2' => "link4" 

然後使用:

var jsonLinks = JSON.stringify(links); 
alert(jsonLinks); 

會給我:

[null,[null,"comment1","link1","link2","link3"],[null,"comment2","link4"]] 

在我看來,什麼是錯的。什麼是null:s,我不能在php端使用json_decode來獲取元素。

我應該使用什麼功能,將其轉換爲JSON和我如何訪問它在PHP端?

試過這種http://code.google.com/p/jquery-json/但它會給完全輸出JSON.stringify()基本相同(他們也說,在文檔中)。

已經考慮到這幾個小時的努力,現在......希望得到一些具體的幫助。

我只是想從JavaScript發送數組到PHP ......爲什麼會這樣該死困難:/

+0

你爲什麼再問這個問題?你已經問過http://stackoverflow.com/questions/2138812/ – 2010-01-26 12:58:03

回答

2

接聽部分,JavaScript數組是數字和零基於:

>>> var foo = []; 
>>> foo[5] = 'Five'; 
"Five" 
>>> foo 
[undefined, undefined, undefined, undefined, undefined, "Five"] 

與此相反,PHP允許失蹤(和混合)鍵:

<?php 

$foo = array(); 
$foo[5] = 'Five'; 
print_r($foo); 

?> 

Array 
(
    [5] => Five 
) 

如果你想使用數組,我建議你讓他們從零開始,防止遺漏值。否則,你可能可以使用對象。

+0

謝謝你!用這個解釋我想出了一切! – ajsie 2010-01-26 13:27:24

2

有一些jQuery插件,可以(從JSON和解碼)編碼爲JSON


舉例來說,你可以在jquery-json(報價)看一看:

此插件公開四個新功能 到$或jQuery對象:

  • toJSON :將一個javascript對象,數字,字符串或arry序列化爲JSON的 。
  • evalJSON:從JSON轉換爲Javascript,快,實在是微不足道。
  • secureEvalJSON:從JSON轉換爲JavaScript中,但這樣做的同時 檢查,看看是否來源是 實際上JSON,而不是拋出其他 JavaScript語句
  • quoteString:地方轉轉字符串引號,和inteligently轉義任何 報價,反斜槓或控制 字符。
+0

,它給了我與使用JSON.stringify()相同的輸出。如果它的輸出沒有錯,我如何訪問元素?我試着用alert(jsonLinks [1] [1]),但它給了一個未定義的。 – ajsie 2010-01-26 11:43:12

1

我不知道你是怎麼想在你的PHP腳本來讀取,但如果它關係到你有1型陣列,而不是基於0的陣列,然後在JavaScript中,你可以刪除與空(零個元素):

var jsonLinks = JSON.stringify(links.slice(1)); 
+0

我沒有得到null:s ...那些是什麼?我從來沒有訪問通過JavaScript發送的數組,但我想它的$ links = json_decode($ _ POST ['links']),然後使用$ links [1] [1]等,但它不起作用。所以我猜錯了什麼是錯誤的原因,爲什麼我得到所有的NULLS? – ajsie 2010-01-26 11:46:39

+0

因爲您正在索引「1」處開始數組,所以會得到空值。 Javascript數組是基於零的,所以索引0(鏈接[0],鏈接[1] [0]和鏈接[2] [0])將爲「空」(未設置) – Graza 2010-01-26 17:47:51