![](/img/trans.png)
[英]Don't understand why alert gives me correct result, while function doesn't execute javascript
[英]Passing JSON created in PHP to Javascript changes a result and I don't understand why
我在 PHP 中有一個 object,我將在同一頁面中傳遞給 Javascript。 當console.log
語句返回預期結果時,它似乎通過得很好,但是當我嘗試將其轉換為 Javascript 變量時,“id”被替換為 1,沒有引號,而不是預期結果。 如果我將 PHP 語句放在方括號中的 Javascript 中,“id”不會改變,但它的格式很奇怪。 我想知道為什么會發生這種情況,如果有什么我應該做的不同。
ETA:因為有些混亂:輸入是下面的“數據”。 這是通過 array_push 語句從 SQL 查詢的結果生成的。 我已經包含了 SQL 查詢的每一行的代碼和下面的 array_push 語句,但是 PHP 端似乎沒有問題。
我預期的 output 只是將數據傳輸到 javascript 端的 JSON object 和適當的變量,使用“Javascript”下提到的代碼。 相反,我得到的是這樣的內容,如console.log
output:
{
DNB_number: "0"
color: "darkred"
id: 1
name: "Anonymous"
role: "Author"
size: null
type: "person"
witness_work_id: "1467"
witness_work_role_id: "1659"
}
id 下的 1 是什么問題。
在嘗試將結果轉換為 javascript 變量(您在下面的 javascript 下看到的內容)之前,javascript 端沒有發生任何事情,因此我沒有什么可以告訴您的。 PHP 端發生轉換,我啟動 javascript,然后立即嘗試在 javascript 端調用它。
PHP 代碼:
$person_color = "darkred";
foreach ($person_data as $row) {
$person_id = $row["person_id"];
$type = "person";
$witness_work_role_id = $row["Witness_work_role_id"];
$witness_work_id = $row["Witness_work_id"];
$person = $row["Person_name"];
$DNB = $row["Oxford_DNB_number"];
$role = $row["Role"];
$color = $person_color;
array_push($GLOBALS['person_array'], array(
'id'=>$person_id,
'witness_work_role_id'=>$witness_work_role_id,
'witness_work_id'=>$witness_work_id,
'type'=>$type,
'name'=>$person,
'DNB_number'=>$DNB,
'role'=>$role,
'color'=>$color,
'size'=> NULL
));
}
$jperson = json_encode($person_array);
Javascript 代碼:
person_array = <?=$jperson; ?>;
數據:
[
{
"id": "1",
"witness_work_role_id": "1660",
"witness_work_id": "1468",
"type": "person",
"name": "Anonymous",
"DNB_number": "0",
"role": "Author",
"color": "darkred",
"size": null
},
{
"id": "152",
"witness_work_role_id": "1573",
"witness_work_id": "1384",
"type": "person",
"name": "Gilbert Banester",
"DNB_number": "0",
"role": "Author",
"color": "darkred",
"size": null
},
{
"id": "153",
"witness_work_role_id": "1574",
"witness_work_id": "1385",
"type": "person",
"name": "Elizabeth Plantagenet (Elizabeth of York)",
"DNB_number": "8635",
"role": "Author",
"color": "darkred",
"size": null
},
{
"id": "3",
"witness_work_role_id": "1642",
"witness_work_id": "1451",
"type": "person",
"name": "Geoffrey Chaucer",
"DNB_number": "5191",
"role": "Author",
"color": "darkred",
"size": null
},
{
"id": "7",
"witness_work_role_id": "1643",
"witness_work_id": "975",
"type": "person",
"name": "Benedict Burgh",
"DNB_number": "3390",
"role": "Author",
"color": "darkred",
"size": null
},
{
"id": "5",
"witness_work_role_id": "1659",
"witness_work_id": "1467",
"type": "person",
"name": "Anonymous",
"DNB_number": "0",
"role": "Author",
"color": "darkred",
"size": null
}
]
讓我們在一個最小的例子中解決這個問題。 根據您所說的,該變量是一個字符串(一個 int),並且該值在 memory 中是正確的。但是當您通過console.log
查看該值時,您會看到一個 int 而不是一個字符串。
var test = "1";
if (typeof test == 'string') {
console.log('yes, it is a string');
} else {
console.log('no, it is not a string');
}
如果您將上面的內容復制/粘貼到您的 JS 控制台並運行它,您將看到消息yes, it is a string
。 這就證明是memory中的字符串。
測試此值的另一種方法是在您的控制台中運行test
,您應該會看到"1"
output。
但是現在,當我們使用console.log
檢查值時:
console.log(test)
輸出1
另一個沒有變量的例子: console.log("123")
輸出123
,而不是"123"
顯然發生的事情只是console.log
的產物。 有關更多示例和解釋,請參閱Javascript console.log(object) 與連接字符串。 https://dmitripavlutin.com/console-log-tips/列出了更多選項。 例如,如果您創建一個包含變量的 object 和 output : console.log({test})
將 output {test: "1"}
,因此您可以再次看到 test 是一個值為"1"
的字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.