Тема: Content-Type: application, multipart
Я виріши не користуватися application/x-www-form-urlencoded коли відправляю на сервер запити за допомогою технології ajax, я хочу використовувати JSON.
Я зробив простий проект що легко було розбиратися. (калькулятор на дію додавання)
Як мені так відправити запит, щоб не використовувати application/x-www-form-urlencoded ?
Коли я пишу
xhttp.setRequestHeader("Content-type", "application/json; charset=utf-8");
масив POST пустий. Як отримати дані з змінних num1 і num2 ?
Це робоча версія, але з application/x-www-form-urlencoded
HTML + JS + AJAX
<html>
<head>
<title>Non</title>
</head>
<body>
<table>
<tr>
<td colspan="2"><input type="number" id="num1"></td>
</tr>
<tr>
<td colspan="2"><input type="number" id="num2"></td>
</tr>
<tr>
<td colspan="2">
<input type="number" id="answer" style="background-color: white;" value="0" disabled>
</td>
</tr>
<tr>
<td colspan="2"><button type="button" onclick="loadCalc()">Send</button></td>
</tr>
<tr>
<td><p>Condition:</p></td>
<td><p id="condition">ready</p></td>
</tr>
</table>
<script>
function loadCalc()
{
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function()
{
if (this.readyState == 0)
{
document.getElementById('condition').innerHTML =
'request not initialized';
}
else if (this.readyState == 1)
{
document.getElementById('condition').innerHTML =
'server connection established';
}
else if (this.readyState == 2)
{
document.getElementById('condition').innerHTML =
'request received';
}
else if (this.readyState == 3)
{
document.getElementById('condition').innerHTML =
'processing request';
}
else if (this.readyState == 4 && this.status == 200)
{
document.getElementById('condition').innerHTML =
'ready';
document.getElementById('answer').value =
Number(this.responseText);
}
};
var num1 = document.getElementById('num1').value;
var num2 = document.getElementById('num2').value;
var request = JSON.stringify({
"num1": num1,
"num2": num2
});
xhttp.open('POST', 'calculator.php', true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send('request=' + request);
}
</script>
</body>
</html>
PHP
<?php
header('Content-Type: application/json; charset=utf-8');
$jd = json_decode($_POST['request']);
echo $jd->{'num1'} + $jd->{'num2'};
?>
Ще в мене питання про бінарні файли, я читав що бінарні файли відправляються за допомогою MIME типу multipart/form-data, але коли я почитав як складно це все робиться, то в мене виникло питання: "чи це й досі використовується ?" Як відправлять на сервер бінарні файли ?
Можна використовувати наприклад JSON ( Якщо так то як ? ) ?
{ "filename": file.jpg }