2016-07-28 2 views
0

시나리오 : 페이지로드 (php)의 데이터베이스 셀을 변경 사항의 x 분마다 간격 루프에서 비교해야합니다.php 배열과 javascript 배열이 같은 데이터 비교

내 초기 데이터를로드는 다음과 같습니다

var olddata = JSON.stringify(<?php echo json_encode($data1); ?>) + "~|~" + 
    JSON.stringify(<?php echo json_encode($data2); ?>) + "~|~" + 
    JSON.stringify(<?php echo json_encode($data3); ?>); 

그래서 페이지로드에, 내가 가진 자바 스크립트 변수에 세포를 저장 "~ | ~"구분 기호 $의 데이터 1, $의 데이터 2, 및 $ data3은 데이터베이스에서 3 개의 다른 셀 (데이터 배열)입니다.

그리고 내 간격 루프 데이터 (아약스)에 대한 호출은 다음과 같습니다 : 나는 data에 대한 olddata 그들이 그것을에서 /가에 \/ 모양을 가지고 그 ... 데이터를 제외하고 거의 동일 보면 비교

// PHP on the AJAX page 
echo json_encode($data1)."~|~".json_encode($data2). "~|~".json_encode($data3); 

// AJAX code that gets called every x Intervals 
$.get("ajaxpage.php", function(data) { 
    if (data == olddata) { 
     console.log("Good!"); 
    } 
}); 

data variable and not in the olddata` 변수가 있습니다.

예 :

"10":["10"],"11":["11 5\/25"] // data = return from the AJAX call 
"10":["10"],"11":["11 5/25"] // olddata = what was originally echoed on page load. 

가 어떻게 그들이 완벽하게 일치되도록 두 가지를 비교할 수 있는가? 그래서 내가 데이터베이스와 json_encode에서 반향하는 것은 json 함수가 리턴 한 페이지와 jason으로 인코딩 된 똑같은 것으로부터 얻은 것과 일치합니다.

참고 : 나는 다음 JSON.stringify을 제거하는 경우가 반환됩니다 [개체 개체]

+0

비교가 쓸데 없는데, 제 견해로, 데이터를 가져 와서 그것을 표시하십시오 ... 또한 olddata를 배열로 저장하는 것이 어떻습니까? –

답변

2

당신은 매우 나쁜 습관을 가지고 있습니다.

var olddata = JSON.stringify(<?php echo json_encode($data1); ?>) + "~|~" + 
JSON.stringify(<?php echo json_encode($data2); ?>) + "~|~" + 
JSON.stringify(<?php echo json_encode($data3); ?>); 

를 그리고 자바 스크립트 글로벌 VAR에 저장 "olddata"다음 $.get에 의해 반환되는 새 데이터로 기존 데이터를 비교 : 그냥이를 얻을 수 AJAX를 사용합니다. 이것은 당신의 버그에 대한 해결책은 아니지만, 당신이하는 일을하는 더 좋은 방법입니다.

단지처럼 당신의 $.get 함수에서 반환 값의 타입을 선언 버그를 해결하려면 다음을 보면, 반환 형식에 대한 자세한 내용은

$.get("ajaxpage.php", function(data) { 
    if (data == olddata) { 
     console.log("Good!"); 
    } 
}, 'text'); 

JQuery와 문서 : jQuery $.get Documentation

+1

Ahhh 고맙다. 왜 그런지 모르겠다. AJAX 호출에서 두 변수를 모두 잡는 대신 생각하면됩니다. 고맙습니다! – DanceSC

0

그냥으로 변경 :

var olddata = '<?php echo json_encode($data1, JSON_HEX_APOS); ?>~|~<?php echo json_encode($data2, JSON_HEX_APOS); ?>~|~<?php echo json_encode($data3, JSON_HEX_APOS); ?>'; 

하고 백엔드 : 이제

echo json_encode($data1, JSON_HEX_APOS)."~|~".json_encode($data2, JSON_HEX_APOS). "~|~".json_encode($data3, JSON_HEX_APOS); 

당신은 단순히 두 개의 문자열을 비교하는 것입니다.

+0

나는 이것과 나는 똑같은 문제를 겪고있다. 그것은 여전히 ​​슬래시 앞에 슬래시를 추가하고 있으며 작은 따옴표와 다른 문자들을 인코딩하고있다. – DanceSC

관련 문제