it-roy-ru.com

Отправка JSON на сервер и получение взамен JSON без JQuery

Мне нужно отправить JSON (который я могу преобразовать в строку) на сервер и получить полученный JSON на стороне пользователя без использования JQuery.

Если я должен использовать GET, как мне передать JSON в качестве параметра? Есть ли риск, что это будет слишком долго?

Если я должен использовать POST, как мне установить эквивалент функции onload в GET?

Или я должен использовать другой метод?

ПРИМЕЧАНИЕ

Этот вопрос не об отправке простого AJAX. Он не должен быть закрыт как дубликат.

83
Jérôme Verstrynge

Отправка и получение данных в формате JSON с использованием метода POST

// 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": "[email protected]", "password": "101010"});
xhr.send(data);

Отправка полученных данных в формате JSON методом GET

// Sending a receiving data in JSON format using GET method
//      
var xhr = new XMLHttpRequest();
var url = "url?data=" + encodeURIComponent(JSON.stringify({"email": "[email protected]", "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();

Обработка данных в формате JSON на стороне сервера с использованием PHP

<?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 зависит как от сервера, так и от клиента (браузера), от 2 до 8 КБ. Сервер должен вернуть статус 414 (Request-URI Too Long), если URI длиннее, чем может обработать сервер.

Примечание Кто-то сказал, что я мог бы использовать имена состояний вместо значений состояний; другими словами, я мог бы использовать xhr.readyState === xhr.DONE вместо xhr.readyState === 4. Проблема в том, что Internet Explorer использует разные имена состояний, поэтому лучше использовать значения состояний.

168
hex494D49

Используя новый API fetch :

const dataToSend = JSON.stringify({"email": "[email protected]", "password": "101010"});
let dataRecieved=""; 
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 =>{
                 dataToRecieved = JSON.parse(dataJson);
             })
              .catch(err =>{
                if(err=="server")return
                console.log(err);
            })
            
             
0
John Balvin Arias