[英]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);
}
兩件事情:
您不能僅將JSON轉儲到URL的末尾並期望它正確地傳遞到服務器。
至少,您必須對其進行URI編碼:
url += "&json="+encodeURIComponent(json);
您在代碼段中使用extraFields
的方式未將其用作數組。 如果您將其創建為數組,則這些鍵將不會序列化。 您使用它的方式,創建extraFields
的正確方法是:
extraFields = {}; // NOT `= []` and NOT `= new Array()`
那是一個對象,而不是數組。 (不要讓PHP術語“關聯數組”愚弄您;該術語是特定於PHP的,並且從廣義上講與術語“數組”無關。如果要在JavaScript代碼中使用任意名稱/值對,則該術語是“對象” [或有時是“地圖”或“詞典”,但它們是對象]。)
如果將非索引屬性添加到數組,則JSON.serialize
將忽略它們(將其保留)。 僅將數組( []
)與JSON一起用於數字索引數據。 將對象( {}
)用於名稱/值對。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.