2009-10-08 5 views
1

입력 텍스트 필드, 추가 버튼 및 제출 버튼으로 구성된 웹 양식이 있다고 가정 해 보겠습니다. 사용자는 입력을 입력하고 추가를 클릭하여 div에 텍스트를 추가 할 수 있습니다. 그러면 동적으로 (javascript를 사용하여) div를 입력 한대로 div를 추가합니다. 또한 추가하는 동안 자바 스크립트 객체에 텍스트를 저장합니다. 하나 이상의 항목을 추가 한 다음 사용자는 제출을 클릭하여 javascript 객체의 데이터를 저장할 서버로 보냅니다. 데이터는 JSON 문자열로 직렬화되어 서버로 전송됩니다.JSON에서 복잡한 자바 스크립트 객체 다시 채우기

내가 겪고있는 문제는 항목을 추가하는 동안 새로 고침이 적용되는 경우입니다. 현재 추가 된 항목이 페이지뿐만 아니라 javascript 객체에도 표시되도록하고 싶습니다.

내가 지금까지 가지고있는 것은 각 Add 후에 AJAX를 사용하여 현재 목록을 서버에 보내고 세션 데이터로 저장하는 것입니다. 내 세션에서 클라이언트 측 JavaScript 객체로 데이터를 가져 오는 가장 좋은 방법은 무엇입니까?

내가 생각할 수있는 가장 좋은 점은 JSON 문자열을 페이지에 다시 포함시킨 다음 클라이언트 측 JavaScript를 사용하여 javascript 객체를 다시 채우는 것입니다. 그게 효과가 있지만, 데이터의 양이 매우 커지면 클라이언트 측 자바 스크립트 처리 속도가 느려질 것으로 예상됩니다.

(내 실제 상황에서 내 javascript 객체는 이보다 훨씬 복잡합니다. 상속을 구현 한 곳에서 "get"및 "set"메소드 등을 동적으로 구현하는 함수가 있습니다. 즉, eval (JSON)을 사용하여 객체를 덮어 쓸 수 없다는 것입니다.

편집 :이 기능이 작동하는 곳에서는 새로 고침 만하는 것이 아니라는 점에 유의하십시오. 이전에 제출 된 데이터 세트를 편집 할 수 있으며, 이때 서버 측 데이터 인 클라이언트 측 javascript 객체를 다시 채워야합니다.

답변

1

이것은 상당히 광범위한 질문이므로 문제에 대한 고유 한 대답이 없을 수도 있습니다. 내가 그 때 그것을 논평하자.

  • 나의 첫 번째 반응 (내가 프로젝트의 리드 인 경우) : "새로 고침 버튼에 대해 걱정하지 마십시오." 아무도 합리적으로 새로 고침 버튼이 어떤 상태도 유지할 것으로 기대하지 않는다고 생각합니다. 그것이 새로 고침이라고하는 이유입니다. 그것은 웹의 시작부터 이런 식으로 행동했기 때문에 나는 싸울 필요가 없다고 생각합니다. 네, 오늘은 여전히 ​​여기에 여전히 존재하고 그것이하는 것처럼 행동한다는 것은 불행한 일입니다. 그리고 웹이 오늘 다시 발명 된 것이라면 나는 여기 없을 것이라고 확신합니다.

  • 그러나 실제로 어떤 이유로 든 상태를 유지해야한다면, 나는 당신이하고있는 것이 좋은 해결책이라고 생각합니다. 최신 브라우저 (IE8 이상, Firefox 2 이상, Safari 3 이상 등)를 사용중인 경우 DOM storage을 고려해 볼 것을 권장합니다. 아마 더 우아 할 것입니다 - 서버 세션이 필요 없습니다.

  • 또 다른 (임의의) 의견입니다. 새로 고침 버튼을 눌렀을 때 사용자가 상태를 잃으면 얼마나 심각한가요? window.onunload 이벤트에 연결하여 잠재적으로 데이터가 손실 될 수 있음을 사용자에게 경고한다면 어떻게 될까요? 그게 충분 할까?

+0

글쎄, 새로 고침 버튼이 아닙니다. 제출 된 모든 내용은 나중에 편집 할 수 있으며, 서버 데이터에서 javascript 객체를 다시 채울 때 비슷한 해결책이 필요합니다. –

+0

확인. 그러나 사용자가 제출을 명중하면 데이터가 아마도 일부 데이터베이스에 저장되고 다음에 페이지가 편집을 위해 표시 될 때 데이터 베 이스에서 가져 와서 페이지를 렌더링하겠습니까? 그래서 예, 지루한 작업이 많이 필요할 수 있습니다.페이지 (아마도 JSON)를 사용하여 데이터를 전달하고 동일한 JavaScript 함수를 사용하여 동적으로 추가 된 div를 다시 작성해야합니다. 나는 이미 기존의 데이터를 HTML (더 나은 사용자 경험)로 직접 고려할 것입니다. 원래의 질문은 데이터를 보존하지 않는 방법에 대한 것입니다. –

+0

페이지를 아무 문제없이 다시 채울 수 있습니다. 그것은 클라이언트 측 JavaScript 객체를 다시 채우고 있습니다. 코드를 작성하는 것이 고통스럽지 않기 때문에가 아니라, 내가 원하는대로 페이지로드시 서버 측에서 채우기 만하면됩니다. –