JSON을 서버에 보내고 JQuery없이 JSON을 반환합니다.


115

JSON (문자열화할 수 있음)을 서버에 보내고 JQuery를 사용하지 않고 사용자 측에서 결과 JSON을 검색해야합니다.

GET을 사용해야하는 경우 JSON을 매개 변수로 어떻게 전달합니까? 너무 길어질 위험이 있습니까?

POST를 사용해야하는 경우 onloadGET에서 해당 기능을 어떻게 설정 합니까?

아니면 다른 방법을 사용해야합니까?

이 질문은 간단한 AJAX를 보내는 것이 아닙니다. 중복으로 닫아서는 안됩니다.


을 사용해야 XMLHttpRequest합니다. 이름에도 불구하고 JSON 데이터에 사용할 수 있습니다 (실제로 jQuery가 백그라운드에서 수행하는 방식입니다).
elixenide 2014-06-28

2
나는 데이터를 게시 할 것입니다. 이것을보세요 : youmightnotneedjquery.com . vanilla JS로 데이터를 가져오고 게시하는 방법을 보여줍니다.
HaukurHaf 2014-06-28

1
@Ed Cottrell 참조 된 질문은이 질문과 관련이 없습니다. 참조는 (JUST) sendingajax 요청 에 대해 다루고 있으며 이는 매우 일반적인 것입니다. 이 사람은 요구되고 sending있지만 및 receiving JSON순수 자바 스크립트로. 또한이 JSON을 다시 보내려면 server-side참조 된 질문에서 언급되지 않은 또 다른 문제인 문제의이 부분을 해결하는 방법을 알아야합니다 .
hex494D49

1
@Ed Cottrell 귀하가 언급 한 질문에는 승인 된 답변이 없으며 이전 방법을 사용하여 Ajax 요청을 생성합니다. 이 질문에 대한 완전한 답을 제공하지는 않습니다. 내 질문은 전통적인 Ajax POST 또는 GET보다 더 미묘합니다. 요점을 놓쳤습니다.
Jérôme Verstrynge 2014-07-01

1
@JVerstry onreadystatechangeonload아래에서 받아 들여지는 답변과 같이 에뮬레이션하는 데 사용하는 것입니다. 구문 분석을 위해 JSON.parse()(다시 대답에 표시된 것처럼) 사용하지만 질문에서 문자열 화를 언급했기 때문에 이미 알고 있다고 가정했습니다. 나는이 점을 다루는 1 개가 아닌 2 개의 질문을 지적함으로써 당신을 돕기 위해 노력했습니다. 분명히 약간의 차이가 있습니다. 거의 2 개의 질문이 정확히 일치하는 경우는 드물지만 JSON을 문자열 화하고 구문 분석하는 방법을 이미 알고 있다면 사소한 것입니다. 즉, 귀하와 @ hex494D49가 동의하지 않기 때문에 재개를 위해 이것을 지명하고 있습니다.
elixenide

답변:


221

POST 방식을 사용하여 JSON 형식으로 데이터 송수신

// Sending and receiving data in JSON format using POST method
//
var xhr = new XMLHttpRequest();
var url = "url";
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
        var json = JSON.parse(xhr.responseText);
        console.log(json.email + ", " + json.password);
    }
};
var data = JSON.stringify({"email": "hey@mail.com", "password": "101010"});
xhr.send(data);

GET 메소드를 사용하여 JSON 형식으로 데이터 송수신

// Sending a receiving data in JSON format using GET method
//      
var xhr = new XMLHttpRequest();
var url = "url?data=" + encodeURIComponent(JSON.stringify({"email": "hey@mail.com", "password": "101010"}));
xhr.open("GET", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
        var json = JSON.parse(xhr.responseText);
        console.log(json.email + ", " + json.password);
    }
};
xhr.send();

PHP를 사용하여 서버 측에서 JSON 형식의 데이터 처리

<?php
// Handling data in JSON format on the server-side using PHP
//
header("Content-Type: application/json");
// build a PHP variable from JSON sent using POST method
$v = json_decode(stripslashes(file_get_contents("php://input")));
// build a PHP variable from JSON sent using GET method
$v = json_decode(stripslashes($_GET["data"]));
// encode the PHP variable to JSON and send it back on client-side
echo json_encode($v);
?>

HTTP Get 요청 길이 제한은 사용되는 서버와 클라이언트 (브라우저) 모두에 따라 2kB-8kB입니다. URI가 서버가 처리 할 수있는 것보다 긴 경우 서버는 414 (Request-URI Too Long) 상태를 반환해야합니다.

참고 누군가 내가 상태 값 대신 상태 이름을 사용할 수 있다고 말했습니다. 즉, xhr.readyState === xhr.DONE대신 사용할 수 있습니다 xhr.readyState === 4. 문제는 Internet Explorer가 다른 상태 이름을 사용하므로 상태 값을 사용하는 것이 좋습니다.


4
이어야 xhr.status === 200합니다.
qed

동일한 코드를 사용하여 로컬 호스트에서 호스팅되는 REST API에 JSON 데이터를 게시하지만 오류가 발생합니다XHR failed loading: POST
viveksinghggits

@viveksinghggits 먼저 위의 코드가 로컬 호스트에서 작동하는지 확인하십시오. 작동한다면 (작동해야 함) 문제는 서버 쪽 어딘가에있을 것입니다. 그렇지 않은 경우 알려 주시면 확인하겠습니다. 이렇게하면 코드가 없어서 도와 드릴 수 없습니다.
hex494D49

@ hex494D49 응답을 주셔서 감사합니다. 클릭 이벤트에 의해 실행되도록 변경했을 때 실제로 양식의 제출 작업에서 XHR을 실행했습니다. 이해할 수있는 CORS 오류가 발생하여 서버 측 코드를 변경하고 있습니다. 나는 여기에 대해 쓴 medium.com/@viveksinghggits/...
viveksinghggits

6

새 API 가져 오기 사용 :

const dataToSend = JSON.stringify({"email": "hey@mail.com", "password": "101010"});
let dataReceived=""; 
fetch("",{credentials:'same-origin',mode:'same-origin',method:"post",body:dataToSend})
              .then(resp => {
                if(resp.status==200){
                   return resp.json()
                }else{
                    console.log("Status: "+resp.status);
                    return Promise.reject("server")
                }
              })
           .then(dataJson =>{
                 dataReceived = JSON.parse(dataJson);
             })
              .catch(err =>{
                if(err=="server")return
                console.log(err);
            })
            
 console.log(`Received: ${dataReceived}`)                
서버가 200 (ok)이 아닌 다른 상태를 보낼 때 처리해야합니다. 공백으로두면 json을 구문 분석하려고 시도하지만없는 경우 오류가 발생하므로 해당 결과를 거부해야합니다.


1
JSON.stringify두 번 사용하고 있습니다.
Shukant Pal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.