Je sais qu'avec la nouvelle API Fetch (utilisée ici avec async
/await
d'ES2017), vous pouvez effectuer une requête GET comme celle-ci:
async getData() {
try {
let response = await fetch('https://example.com/api');
let responseJson = await response.json();
console.log(responseJson);
} catch(error) {
console.error(error);
}
}
Mais comment faites-vous une demande POST?
En bref, Fetch vous permet également de transmettre un objet pour une requête plus personnalisée:
fetch("http://example.com/api/endpoint/", {
method: "post",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
//make sure to serialize your JSON body
body: JSON.stringify({
name: myName,
password: myPassword
})
})
.then( (response) => {
//do something awesome that makes the world a better place
});
Consultez la documentation de recherche pour encore plus de goodies et de pièges:
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
Veuillez noter que puisque vous faites un motif asynchrone try/catch, vous omettez simplement la fonction then()
dans mon exemple;)
si vous souhaitez effectuer une simple demande de publication sans envoyer de données au format JSON.
fetch("/url-to-post",
{
method: "POST",
// whatever data you want to post with a key-value pair
body: "name=manas&age=20",
headers:
{
"Content-Type": "application/x-www-form-urlencoded"
}
}).then((response) =>
{
// do something awesome that makes the world a better place
});
Voici un exemple complet: Après avoir passé des heures à bricoler des extraits de code incomplets, j’ai finalement réussi à publier du code JavaScript à partir de JavaScript, à le récupérer à l’aide de php sur un serveur, à ajouter un champ de données et à mettre à jour la page Web originale. Voici le code HTML, le PHP et le JS. Mes remerciements à tous ceux qui ont posté les fragments de code originaux rassemblés ici. Un code similaire est en ligne ici: https: // www .nbest.co.uk/Fetch/index.php
<!DOCTYPE HTML>
<!-- Save this to index.php and view this page in your browser -->
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Javascript Fetch Example</title>
</head>
<body>
<h1>Javascript Fetch Example</h1>
<p>Save this to index.php and view this page in your browser.</p>
<button type="button" onclick="myButtonClick()">Press Me</button>
<p id="before">This is the JSON before the fetch.</p>
<p id="after">This is the JSON after the fetch.</p>
<script src="fetch.js"></script>
</body>
</html>
<!-- --------------------------------------------------------- -->
// Save this as fetch.js --------------------------------------------------------------------------
function success(json) {
document.getElementById('after').innerHTML = "AFTER: " + JSON.stringify(json);
console.log("AFTER: " + JSON.stringify(json));
} // ----------------------------------------------------------------------------------------------
function failure(error) {
document.getElementById('after').innerHTML = "ERROR: " + error;
console.log("ERROR: " + error);
} // ----------------------------------------------------------------------------------------------
function myButtonClick() {
var url = 'json.php';
var before = {foo: 'Hello World!'};
document.getElementById('before').innerHTML = "BEFORE: " + JSON.stringify(before);
console.log("BEFORE: " + JSON.stringify(before));
fetch(url, {
method: 'POST',
body: JSON.stringify(before),
headers:{
'Content-Type': 'application/json'
}
}).then(res => res.json())
.then(response => success(response))
.catch(error => failure(error));
} // ----------------------------------------------------------------------------------------------
<?php
// Save this to json.php ---------------------------------------
$contentType = isset($_SERVER["CONTENT_TYPE"]) ? trim($_SERVER["CONTENT_TYPE"]) : '';
if ($contentType === "application/json") {
$content = trim(file_get_contents("php://input"));
$decoded = json_decode($content, true);
$decoded['bar'] = "Hello World AGAIN!"; // Add some data to be returned.
$reply = json_encode($decoded);
}
header("Content-Type: application/json; charset=UTF-8");
echo $reply;
// -------------------------------------------------------------
?>
Le meilleur moyen de POST) de transformer des données en script PHP est le Fetch API . Voici un exemple:
function postData() {
const form = document.getElementById('form');
const data = new FormData();
data.append('name', form.name.value);
fetch('../php/contact.php', {method: 'POST', body: data}).then(response => {
if (!response.ok){
throw new Error('Network response was not ok.');
}
}).catch((err) => {
console.log(err);
});
}
<form id="form" action="javascript:postData()">
<input id="name" name="name" placeholder="Name" type="text" required>
<input type="submit" value="Submit">
</form>
Voici un exemple très basique d'un script PHP qui prend les données et envoie un email:
<?php
header('Content-type: text/html; charset=utf-8');
if (isset($_POST['name'])) {
$name = $_POST['name'];
}
$to = "[email protected]";
$subject = "New name submitted";
$body = "You received the following name: $name";
mail($to, $subject, $body);