Ajax를 통해 Javascript Object를 PHP로 전송
나는 실패로 Ajax를 배우고 있고 벽에 부딪혔습니다.
저는 자바스크립트로 작성된 배열(중요한 경우, 배열은 사용자가 확인하는 확인란을 기반으로 번호 ID를 저장하고 있습니다)을 가지고 있습니다.
사용자가 '저장' 버튼을 클릭하면 호출되는 기능이 있습니다.기능은 다음과 같습니다.
function createAmenities() {
if (window.XMLHttpRequest) {
//code for IE7+, Firefox, Chrome and Opera
xmlhttp = new XMLHttpRequest();
}
else {
//code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById('message').innerHTML = xmlhttp.responseText;
}
}
var url = "create_amenities.php";
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
제 질문은:내가 부르려는 php 스크립트에 배열을 끌어오려면 이 함수에 무엇을 넣을 수 있습니까? ('create_amenities.php')
게다가, 제가 JSON을 사용해 봐야 하나요?그리고 그렇다면 JSON 객체를 아약스를 통해 어떻게 보낼 수 있습니까?
잘 부탁드립니다.
배열이 1차원 이상이거나 연관 배열인 경우 JSON을 사용해야 합니다.
Json은 완전한 배열 구조를 문자열로 바꿉니다.이 문자열은 당신의 php 애플리케이션으로 쉽게 보낼 수 있고 다시 php 배열로 바뀔 수 있습니다.
json에 대한 더 많은 정보: http://www.json.org/js.html
var my_array = { ... };
var json = JSON.stringify( my_array );
php에서 json_decode로 문자열을 디코딩할 수 있습니다.
http://www.php.net/manual/en/function.json-decode.php
var_dump(json_decode($json));
어레이를 루프하고 추가합니다.encodeURIComponent('keyname[]') + '=' + encodeURIComponent(theArray[i]) + '&'
매번 쿼리 문자열로 이동합니다.
게다가, 제가 JSON을 사용해 봐야 하나요?
그럴 수도 있지만, 일반적인 양식 처리로 처리하는 대신 다른 쪽 끝에서 JSON을 디코딩하는 것을 의미합니다.
그리고 그렇다면 JSON 객체를 아약스를 통해 어떻게 보낼 수 있습니까?
JSON 객체는 없습니다.JSON은 문자열의 형태를 취하며, 쿼리 문자열에 문자열을 포함할 수 있습니다.encodeURIComponent
).
저는 이 질문이 자바스크립트 애호가들에게 유용하다는 것을 알았습니다.
js 배열이든 js 개체든 javascript Object를 보낼 때는 디코딩 및 처리를 위해 서버에 배치하기 전에 설정을 문자열화해야 합니다.
js 객체 문자열화: 사용자의 기능을(를) 지정합니다.
Javascript Array 개체의 경우
let my_array = ["select1", "select2", "..."];
my_array = JSON.stringify(my_array);
Javascript Object 객체의 대소문자
let my_obj = {
name: "Daniel",
age: 23,
location: "Nigeria"
}
my_obj = JSON.stringify(my_obj);
사용 사례에 따라 AJAX GET 메소드를 사용하여 문자열화된 개체를 서버로 보낼 수 있습니다.
다음은 전체 코드입니다.
function createAmenities() {
if (window.XMLHttpRequest) {
//code for IE7+, Firefox, Chrome and Opera
xmlhttp = new XMLHttpRequest();
}
else {
//code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText);
document.getElementById('message').innerHTML = this.responseText;
// if your returned response is in json, please, do ensure to parse the response before displaying
// like this JSON.parse(this.responseText)
}
}
let my_array = ["select1", "select2", "..."];
my_array = JSON.stringify(my_array);
var url = "create_amenities.php?my_json=" + my_array;
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
당신의 코드에서 제가 주목한 것은 다음과 같습니다.
- 전화할 필요가 없습니다.
xmlhttp
xmlhttp 객체 내부에서 다시, 당신이 필요한 것은.this
저는 당신이 서버로 보내는 배열 객체를 보관하는 my_json 매개변수를 포함했습니다.
이제, 여기 서버에서, 당신은 객체를 잡아서 php 판독 가능한 객체로 변환해야 할 것입니다.
$my_json = $_GET['my_json'];
$my_json = json_decode($my_json);
이제 당신은 원하는 것을 무엇이든 할 수 있습니다. 왜냐하면 그것은 이제 완전한 php 배열이 되었기 때문입니다.첫 번째 배열 옵션을 선택하는 예:
$first = $my_json[0];
echo json_encode($first) // hahaha, you echoed it for AJAX to display
// i used to json_encode() to convert from php object to a js readable object
우선, 네, 손으로 아약스를 쓰지 마세요.당신은 모든 브라우저에서 제대로 작동하는 것을 만들지 않을 것입니다.
실제 문제에 가장 적합한 방법은 어레이를 cgi 매개 변수로 제출하는 것입니다.
확인란이 양식에 있는 경우에는 거의 수행하지 않아도 됩니다. 양식을 제출하기만 하면 됩니다.
<form><input type=checkbox ...><input type=checkbox ...>
$.post("test.php", $("#testform").serialize());
이 방법에 대한 자세한 내용은 http://api.jquery.com/jQuery.post/ 을 참조하십시오.당신의 목록은 PHP에서 배열로 나타날 것입니다.
또는 매우 간단한 것으로 자신의 예를 확대하려면 다음을 수행합니다.
url = url + '?checkboxes=' + checkboxes.join(',');
이제 PHP 안에서 그것을 나누면 당신은 그것을 되찾을 수 있습니다!
언급URL : https://stackoverflow.com/questions/6937144/sending-javascript-object-to-php-via-ajax
'programing' 카테고리의 다른 글
ARC는 file -fno-objc-arc를 표시하더라도 구조체 또는 유니언에서 Objective-C 개체를 금지합니다. (0) | 2023.07.29 |
---|---|
전체 기록 스택을 지우고 Android에서 새 작업 시작 (0) | 2023.07.29 |
Thymeleafth:reactJS의 텍스트 사용 방법 (0) | 2023.07.29 |
MySQL 데이터베이스에 아랍어로 데이터 저장 (0) | 2023.07.29 |
함수에 매개 변수로 전달하지 않고 Spring에서 현재 사용자 로케일을 가져오는 방법은 무엇입니까? (0) | 2023.07.29 |