그래서이 HTML 형식이 있습니다.
<html>
<head><title>test</title></head>
<body>
<form action="myurl" method="POST" name="myForm">
<p><label for="first_name">First Name:</label>
<input type="text" name="first_name" id="fname"></p>
<p><label for="last_name">Last Name:</label>
<input type="text" name="last_name" id="lname"></p>
<input value="Submit" type="submit" onclick="submitform()">
</form>
</body>
</html>
사용자가 제출을 클릭 할 때이 양식의 데이터를 JSON 개체로 내 서버에 보내는 가장 쉬운 방법은 무엇입니까?
업데이트 : 나는 이것까지 갔지만 작동하지 않는 것 같습니다.
<script type="text/javascript">
function submitform(){
alert("Sending Json");
var xhr = new XMLHttpRequest();
xhr.open(form.method, form.action, true);
xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
var j = {
"first_name":"binchen",
"last_name":"heris",
};
xhr.send(JSON.stringify(j));
내가 뭘 잘못하고 있죠?
답변
완전한 양식 데이터를 배열로 가져오고 json을 문자열 화하십시오.
var formData = JSON.stringify($("#myForm").serializeArray());
나중에 ajax에서 사용할 수 있습니다. 또는 ajax를 사용하지 않는 경우; 숨겨진 텍스트 영역에 넣고 서버로 전달하십시오. 이 데이터가 일반 형식 데이터를 통해 json 문자열로 전달되면 json_decode를 사용하여 디코딩해야합니다 . 그런 다음 모든 데이터를 배열로 가져옵니다.
$.ajax({
type: "POST",
url: "serverUrl",
data: formData,
success: function(){},
dataType: "json",
contentType : "application/json"
});
답변
HTML은 양식 데이터에서 JSON을 생성하는 방법을 제공하지 않습니다.
클라이언트에서 실제로 처리하려면 JavaScript를 사용하여 다음을 수행해야합니다.
- DOM을 통해 양식에서 데이터 수집
- 객체 또는 배열로 구성
- JSON.stringify로 JSON 생성
- XMLHttpRequest로 게시
application/x-www-form-urlencoded
데이터를 고수하고 JSON 대신 서버에서 처리하는 것이 더 나을 것입니다 . 양식에는 JSON 데이터 구조의 이점을 얻을 수있는 복잡한 계층 구조가 없습니다.
질문의 주요 재 작성에 대한 응답으로 업데이트…
- JS에는
readystatechange
핸들러 가 없으므로 응답으로 아무것도하지 않습니다. - 기본 동작을 취소하지 않고 제출 버튼을 클릭하면 JS를 트리거합니다. 브라우저는 JS 기능이 완료되는 즉시 양식을 (정기적으로) 제출합니다.
답변
코드는 괜찮지 만 실행되지 않았습니다. 제출 버튼의 원인 [type = “submit”] 그냥 type = button으로 대체 하세요.
<input value="Submit" type="button" onclick="submitform()">
스크립트 내부;
양식 이 선언되지 않았습니다.
let form = document.forms[0];
xhr.open(form.method, form.action, true);
답변
나는 늦었지만 객체가 필요한 사람들을 위해 html만을 사용하는 방법이 있다고 말할 필요가 있습니다. PHP와 같은 일부 서버 측 프레임 워크에서는 다음 코드를 작성할 수 있습니다.
<form action="myurl" method="POST" name="myForm">
<p><label for="first_name">First Name:</label>
<input type="text" name="name[first]" id="fname"></p>
<p><label for="last_name">Last Name:</label>
<input type="text" name="name[last]" id="lname"></p>
<input value="Submit" type="submit">
</form>
그래서 우리 object[property]
는 객체를 얻기 위해 입력의 이름을 설정해야 합니다. 위의 예에서 우리는 다음 JSON을 가진 데이터를 얻었습니다.
{
"name": {
"first": "some data",
"last": "some data"
}
}
답변
다음과 같이 시도 할 수 있습니다.
<html>
<head>
<title>test</title>
</head>
<body>
<form id="formElem">
<input type="text" name="firstname" value="Karam">
<input type="text" name="lastname" value="Yousef">
<input type="submit">
</form>
<div id="decoded"></div>
<button id="encode">Encode</button>
<div id="encoded"></div>
</body>
<script>
encode.onclick = async (e) => {
let response = await fetch('http://localhost:8482/encode', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
})
let text = await response.text(); // read response body as text
data = JSON.parse(text);
document.querySelector("#encoded").innerHTML = text;
// document.querySelector("#encoded").innerHTML = `First name = ${data.firstname} <br/>
// Last name = ${data.lastname} <br/>
// Age = ${data.age}`
};
formElem.onsubmit = async (e) => {
e.preventDefault();
var form = document.querySelector("#formElem");
// var form = document.forms[0];
data = {
firstname : form.querySelector('input[name="firstname"]').value,
lastname : form.querySelector('input[name="lastname"]').value,
age : 5
}
let response = await fetch('http://localhost:8482/decode', {
method: 'POST', // or 'PUT'
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
})
let text = await response.text(); // read response body as text
document.querySelector("#decoded").innerHTML = text;
};
</script>
</html>