谁偷了我的符
2019獨角獸企業重金招聘Python工程師標準>>>
購物車sku選擇js,切換驗證,一直是我不愿意回憶的黑暗代碼……
時隔幾個月之后,今天突然又發現有個商品無法添加到購物車、經過仔細檢查之后,發現,商品的sku為
array(
? ? 'color'=>'black & grey',
? ? 'size'=>'M'
);
但是購物車文件接收到的sku確是
array(
? ? 'color'=>'black & grey',
? ? 'size'=>'M'
);
因為做過sku匹配驗證,如果不匹配的話,無法加入購物車。我就很奇怪了,明明我什么都沒做,為什么會變呢?
后來經過測試,發現一個問題:測試代碼如下:
<?php
$a = json_encode(array('color'=>'aa & bb'));
? ? ? ? var_dump($a);
? ? ? ? echo '<div id="test">'.$a.'</div>';
? ? ? ? echo '<script>var test = document.getElementById("test").innerHTML</script>';
?>
結果發現,json_encode之后的字符串,放到div里面,瀏覽器會自動將其轉化為html實體。
最終導致我ajax提交給購物車文件處理的時候,出現了sku不匹配的情況。。在購物車文件將html實體的sku再轉化回來就可以了。
$sku = html_entity_decode($sku);
問題是解決了。
雖然我知道把數據放到div里面,再用js去獲取,這樣的方法不好。但是我真不知道有什么其他辦法。。。
我最開始是在php文件里面,
<script>
var sku = '<?php echo json_encode($sku);'
sku = $.parseJSON(sku);
</script>
后來老大說,為了代碼結構更清楚,要把php文件和js文件分開,不能這么寫。我就只能把數據寫到div里面,用jquery去拿了……
不知道還有什么更好的辦法……
轉載于:https://my.oschina.net/u/948242/blog/180809
總結
- 上一篇: Windows下DNS ID欺骗的原理与
- 下一篇: 分布式搜索elasticsearch