簡體   English   中英

Javascript JSON.stringify / PHP json_decode不起作用

[英]Javascript JSON.stringify / PHP json_decode Not working

我正在嘗試從JS發送數組到PHP。

JS:

var json = JSON.stringify(extraFields);
url += "&json="+json;

PHP:

$json = json_decode($_GET['json'], true);

foreach($json as $K=>$V){
    echo "json".$K . "=" . $V ."; ";
}

假設extraFields是以下格式的有效數組:

extraFields['key1'] = 'val1';
extraFields['key2'] = 'val2';
extraFields['key3'] = 'val3';

我收到的PHP錯誤是invalid argument for Foreach

當我遍歷$_GET值並回顯它們時,PHP將$_GET['json']括號括起來,因此將其識別為json。

我究竟做錯了什么?

回答TJ的評論

var extraFields = new Array();
                var countFields = THIS.$_FIELDS.length;
                var Row = new Array();
                while(countFields--){
                    var name = THIS.$_FIELDS[countFields]['name'];
                    var id = THIS.$_FIELDS[countFields]['id'];
                    var elemVal = getElmVal(id);
                    extraFields[name] = elemVal;
                    window.alert(name +"="+ elemVal);
                }

兩件事情:

  1. 您不能僅將JSON轉儲到URL的末尾並期望它正確地傳遞到服務器。

    至少,您必須對其進行URI編碼:

     url += "&json="+encodeURIComponent(json); 
  2. 您在代碼段中使用extraFields的方式未將其用作數組。 如果您將其創建為數組,則這些鍵將不會序列化。 您使用它的方式,創建extraFields的正確方法是:

     extraFields = {}; // NOT `= []` and NOT `= new Array()` 

    那是一個對象,而不是數組。 (不要讓PHP術語“關聯數組”愚弄您;該術語是特定於PHP的,並且從廣義上講與術語“數組”無關。如果要在JavaScript代碼中使用任意名稱/值對,則該術語是“對象” [或有時是“地圖”或“詞典”,但它們是對象]。)

    如果將非索引屬性添加到數組,則JSON.serialize將忽略它們(將其保留)。 僅將數組( [] )與JSON一起用於數字索引數據。 將對象( {} )用於名稱/值對。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM