장바구니를 만들고 쿠키를 사용하여 장바구니 내용을 JSON 개체에 저장하고 있습니다.KEYLESS JSON 배열을 반복할까요?
각 페이지에서 Javascript를 사용하여 쿠키를 검색하고 JSON을 구문 분석하고 각 행을 반복하여 설명 된 제품을 바구니 요약에 표시해야합니다.
배열에서 키를 사용하지 않기로 결정했습니다. 각 위치의 지정 레코드가 있으면 왜 쿠키에 저장해야합니까? 나는 그것이 영리한 생각이라고 생각했지만, 지금은 나의 모든 수색이 열쇠를 사용하라는 제안이다.
이
은 JSON의 샘플입니다{
"9999.9999":["CentOS6",2,"0.5",150,"23.90"],
"0002.0004":["Support5","","3",5,"12.99"],
"9999.9999":["UbuntuServer12.04LTS",1,"1",220,"42.60"]
}
내가 좋아하는, 2 차 기록 (각 행의 마지막 필드에) 예를 들어, '가격'에 액세스 할 수 있도록 기대하고 있었다
그래서 :
basket = JSON.parse(basket);
price = basket[1][4];
그것은 작동하지 않습니다.
이 질문에는 실제로 두 부분이 있습니다.
- 바구니에서 직접 값을 선택하는 방법?
- 어떻게 반복하여 각 행을 차례로 조작 할 수 있습니까?
첫 번째 입력란에 궁금한 점이 있습니다. 그것이 제품의 SKU입니다. 두 개의 "9999.9999"가있는 이유는 예약 된 번호로 제품이 '사용자 지정'제품 (카탈로그 항목을 직접 참조하지 않음)임을 나타 내기 때문입니다. 다음과 같이 @ 아래 인 Samer의 답변에 따라
UPDATE
, 나는, 배열을 사용하는 코드를 업데이트 한 :
json으로는 지금과 같은:
[
["9999.9999","CentOS6",2,"0.5",150,"23.90"],
["0002.0004","Support5","","3",5,"12.99"],
["9999.9999","UbuntuServer12.04LTS",1,"1",220,"42.60"]
]
나 ' m 이제 다음과 같이 쿠키에서 액세스하려고합니다 :
var basket = readCookie('basket');
basket = JSON.parse(basket);
alert('Price of item 2 =' + basket[1][5]);
경고 대신 '상품 2의 가격 = 12.99' '상품 2의 가격 = 정의되지 않음'이 표시됩니다.
나는 무엇을 잘못했는지 궁금합니다.
UPDATE 아직이에 문제가 2
. 어쩌면 쿠키에 데이터를 가져 오는 방법을 설명해야 할 것입니다.
쿠키의 배열은 PHP (사용자 정의 항목 추가시) 또는 카탈로그 항목 추가시 Javascript를 사용하는 클라이언트 측을 사용하여 서버에서 업데이트 할 수 있습니다.
현재 저는 서버 쪽을 추가 한 항목에 집중하고 있습니다.나는 쿠키를 추가하려면 다음 코드를 사용하고 있습니다 :
<?
extract($_POST, EXTR_SKIP);
// Get contents of existing basket (if any) minus last ']'
// so that it's ready to be added to.
if (isset($_COOKIE['basket'])) {
$basket = json_decode($_COOKIE['basket']);
$chars = strlen($basket)-1;
//echo "<pre>".var_dump($basket)."</pre>";
$cookieVal = substr($basket, 0, $chars);
$cookieVal .= ",
[\"9999.9999\",\"$sltOS\",$vcpuPoints,\"".$ramPoints."\",$storagePoints,\"".$baseServerCostMonthUSD."\"]]";
$cookieVal = json_encode($cookieVal);
/*
* Sample format
*
[["9999.9999","CentOS6",2,"0.5",150,"23.90"],
["0002.0004","Support5","","3",5,"12.99"],
["9999.9999","UbuntuServer12.04LTS",1,"1",220,"42.60"]]
*
*/
} else {
$cookieVal = json_encode("[[\"9999.9999\",\"$sltOS\",$vcpuPoints,\"".$ramPoints."\",$storagePoints,\"".$baseServerCostMonthUSD."\"]]");
}
$exp = time()+3600; // sets expiry to 1 hour;
setcookie ('basket' , $cookieVal, $exp, '/');
그런 다음 쿠키를 읽기 위해, 나는 페이지가로드 될 때 호출되는이,이 클라이언트 측 :
function initBasket() {
var basket = readCookie('basket');
if (isJSON(basket)) {
// We'll populate the basket
basket = JSON.parse(basket);
alert(basket[1][5]);
} else {
$('#sList').html('Your basket is empty.');
return;
}
}
UPDATE를 3 마지막으로 작동 시켰습니다. 당신의 도움을 주셔서 감사합니다.
는 어쩌면 다른 사람을 도울 수있는 코드는, 그래서 최종 코드 아래에 포함했습니다PHP의 :
if (isset($_COOKIE['basket'])) {
$cookieVal = json_decode($_COOKIE['basket']);
$cookieVal[] = array
(
"9999.9999",
$sltOS,
$vcpuPoints,
$ramPoints,
$storagePoints,
$baseServerCostMonthUSD
);
$cookieVal = json_encode($cookieVal);
} else {
$cookieArr[] = array
(
"9999.9999",
$sltOS,
$vcpuPoints,
$ramPoints,
$storagePoints,
$baseServerCostMonthUSD
);
$cookieVal = json_encode($cookieArr);
}
// Save VPS choice in basket cookie
$exp = time()+3600; // sets expiry to 1 hour;
setcookie ('basket' , $cookieVal, $exp, '/');
자바 스크립트 :
function initBasket() {
var basket = readCookie('basket');
if (isJSON(basket)) {
// We'll populate the basket
basket = JSON.parse(basket);
alert(basket[1][5]);
} else {
$('#sList').html('Your basket is empty.');
return;
}
}
키를 반복 할 수 없으면 고유합니다. –
데이터 구조 디자인에 문제가 있음을 나타냅니다. 배열을 사용하여 장바구니 항목을 나타내는 대신 사용할 수 있습니다. 즉 SKU를 '키'대신 값으로 사용합니다. Arun이 지적한 것처럼 JSON 객체에 키를 중복시킬 수는 없습니다. – DavidLin
@PeterSnow 대괄호 표기법을 사용해야합니다. 'var price = basket ['0002.0004 '] [4]'트릭을 수행합니다. 그러나 위의 설명 에서처럼 객체의 키는 고유해야합니다. – Teemu