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


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

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

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

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

Примечание

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

1 66

1 ответ:

отправка и получение данных в формате 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": "hey@mail.com", "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": "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();

обработка данных в формате 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 зависит как от сервера, так и от используемого клиента (браузера), от 2kB - 8kB. Сервер должен вернуть состояние 414 (Request-URI Too Long), если URI больше, чем может сервер ручка.

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