$ .post를 통해 JavaScript 객체를 PHP 스크립트로 보낼 수있는 방법은 무엇입니까?
문제
내 페이지에 데이터 테이블이 있습니다. 열은 "시작", "끝", "댓글"및 "옵션"입니다. 옵션 열에는 행을 삭제하는 버튼과 테이블 행을 편집 할 수있는 버튼이 있습니다. 이를 통해 "start", "end"및 "comment"의 값이 변경 될 수 있습니다. 다시 클릭하면 편집 과정이 완료됩니다. 마지막으로 테이블에 다른 행을 추가하는 방법이 있습니다. 이 모든 것은 예상대로 작동합니다.
하단에 버튼을 추가하여 테이블의 데이터에서 배열을 생성하고 싶습니다. 이는 다음과 같이 보입니다 (JSON으로 순수하게 표시 할 수 있도록 : 필요하지 않음) : :
[
{
"start" :"2009/08/01",
"end" :"2009/08/08",
"comment" :"an example date.",
},
{
"start" :"2009/07/01",
"end" :"2009/07/08",
"comment" :"another example date, a month earlier.",
},
{
"start" :"2000/07/01",
"end" :"2000/07/08",
"comment" :"another example date, a year earlier. You get the idea.",
}
]
배열을 구축하는 데 어려움이 너무 많아서는 안되지만 일단 있으면 어떻게 백엔드 PHP 스크립트에 게시 할 수 있습니까 (이를 사용하여 사용합니다. put_csv()
데이터를 파일에 작성하려면)? 이상적으로는 유효성 검사를 허용하기 위해 배열 형식의 서버 측면 이용 가능합니다.
필요한 경우 jQuery를 사용하게되어 기쁩니다.
해결책
서버로 끝내는 방법은 아치를 원하는 것에 따라 다릅니다. 데이터를 처리하는 새 페이지를로드하려면 숨겨진 입력으로 일반적인 양식을 사용할 수 있습니다. 또는 처리하려는 경우 Ajax를 통해 배경에있는 경우 사용하십시오. jQuery.ajax
Crasco가 말했듯이. 어느 쪽이든, 구조화 된 배열을 간단한 키/값 목록으로 변환해야합니다.
한 가지 옵션은 JSON 문서를 생성하는 것입니다 (JQuery가 기능을 제공하지는 않지만 쉽게 찾을 수 있음)와 직렬화 된 문서와 함께 단일 필드를 사용하는 것입니다. 그런 다음 서버 측면에서 사용할 것입니다 json_decode
배열을 되 찾으려면. AJAX 메소드를 사용하는 경우 데이터 옵션 jQuery.ajax
전화는 다음과 같습니다.
{
'data': '[{"start":"2009/08/01","end":"2009/08/08","comment":"an example date."},...'
}
더 나은 접근 방식은 PHP가 기본적으로 이해하는 형식으로 필드 목록으로 직렬화하는 것입니다. 그것은 당신이 특별한 일을해야한다는 것을 의미하며 $_POST['data']
배열이 포함됩니다. 예를 들어:
{
'data[0][start]': '2009/08/01',
'data[0][end]': '2009/08/08',
'data[0][comment]': 'an example date.',
'data[1][start]': '2009/07/01',
'data[1][end]': '2009/07/08',
'data[1][comment]': 'another example date, a month earlier.',
...
}
양식 메소드를 사용하는 경우 다음과 같은 입력 필드를 생성해야합니다.
<input type="hidden" name="data[0][start]" value="2009/08/01" />
다른 팁
나는 확실히 jQuery를 사용할 것입니다. 다음은 $ .post () 함수의 페이지입니다.
http://docs.jquery.com/ajax/jquery.post
한 가지주의 사항 중 하나는 $ .post ()가 단순화 된 $ .ajax () 함수의 래퍼라는 것입니다. Ajax를 통한 중요한 거래의 경우 다음을 사용합니다.
http://docs.jquery.com/ajax/jquery.ajax
예는 다음과 같습니다.
$.ajax({
url: "script.php",
global: false,
type: "POST",
data: ({id : this.getAttribute('id')}),
dataType: "html",
success: function(msg){
alert(msg);
}
});