Отправка JSON на сервер и получение взамен JSON без JQuery
Мне нужно отправить JSON (который я могу преобразовать в строку) на сервер и получить полученный JSON на стороне пользователя без использования JQuery.
Если я должен использовать GET, как мне передать JSON в качестве параметра? Есть ли риск, что это будет слишком долго?
Если я должен использовать POST, как мне установить эквивалент onload
функция в GET?
Или я должен использовать другой метод?
Замечание
Этот вопрос не об отправке простого AJAX. Он не должен быть закрыт как дубликат.
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 зависит как от сервера, так и от клиента (браузера), от 2 до 8 КБ. Сервер должен вернуть статус 414 (Request-URI Too Long), если URI длиннее, чем может обработать сервер.
Примечание. Кто-то сказал, что я мог бы использовать имена состояний вместо значений состояний; другими словами, я мог бы использовать xhr.readyState === xhr.DONE
вместо xhr.readyState === 4
Проблема в том, что Internet Explorer использует разные имена состояний, поэтому лучше использовать значения состояний.
Используя новый api fetch:
const dataToSend = JSON.stringify({"email": "hey@mail.com", "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);
})