Я пытаюсь проверить и узнать, как работает выборка, поэтому я хочу отправить некоторые данные из javascript в php-файл, моя проблема в том, что я не могу получить данные (в php-файле), получая только нулевой ответ.
Я использую POST, но я пробовал с GET с тем же результатом
Кстати, в консоли подключение к сети появляется только после того, как я нажму F5 , как я понимаю, работать должно уже при открытии Test.php.
datosJS.js
let datos = {
method: "POST",
headers: {
"Content-type" : "application/json"
},
body: JSON.stringify({
username:"Jonathan",
email:"[email protected]",
password:"123456"
})
}
fetch('Test.php',datos)
.then(resp => resp.text())
.then(resp =>{
console.info(resp);
})
Тест.php
<script src = "datosJS.js" type = "text/javascript"></script> //I use this to call "datosJS.js" to receive the data here in Test.php
<?php
$body = json_decode(file_get_contents("php://input"), true);
var_dump($body);
?>
Я понимаю, что PHP находится на стороне сервера, а JS на стороне клиента, и оба они работают в разное время, тем не менее у меня возникают проблемы с поиском решения этой проблемы.
Спасибо за помощь !
** Отредактировано небольшое изменение в выборке, которое теперь позволяет мне видеть данные в консоли.
Вы загружаете файл JS в Test.php? Из опубликованного кода это неясно. Если вы хотите вернуть данные из PHP, этот файл не должен содержать никакого другого вывода (без HTML и т. д.), кроме вашего ответа (который должен быть закодирован в json).
Да, извините, я только что отредактировал комментарий. Я загружаю файл JS в Test.php. Идея в том, когда я открываю Test.php для получения данных из файла JS.
Если вы запишете JS в test.php, который затем вызовет test.php для получения результата, вызвав test.php, разве это не поставит под угрозу существование всей вселенной (т.е. бесконечные циклы)?
Даже если это сработает, вы не сможете использовать var_dump для получения разборчивого JSON. Он сериализован, просто используйте echo.
Не волнуйтесь, Skip существование вселенной пока безопасно (насколько я видел, она запускается только один раз при загрузке страницы и все). Я внес изменения в выборку, теперь я вижу данные в консоли, но на реальной странице я все еще получаю NULL. Просто отметим, что «echo» печатает в консоли «Array», а «var_dump» показывает в консоли все содержимое массива.






Ну, наконец, мне удалось получить решение этого, объяснение ниже:
datosJS.js
window.onload = function() {
let datos = {
method: "POST",
headers: {
"Content-type" : "application/json"
},
body: JSON.stringify({
username:"Jonathan",
email:"[email protected]",
password:"123456"
})
}
fetch('Test.php',datos)
.then(resp => resp.text())
.then(resp =>{
console.info(resp);
document.getElementById('results').innerHTML = resp;
//document.querySelector('#results').innerHTML = resp; // works as well as getElementById
})
}
Тест.php
<script src = "datosJS.js" type = "text/javascript"></script>
<section class = "Section" id = "results" name = "results">
<?php
$body = json_decode(file_get_contents("php://input"), true);
$nombre = $body['username'];
echo $nombre;
echo '</br>';
print_r($body);
?>
Ниже я отмечу то, чего не хватало в исходном коде:
В datosJS.js document.getElementById('results').innerHTML = соотв. и завернуть все в window.onload = function() {}
В Test.php добавьте id="results" name="results" в div, раздел или что-то еще, чтобы получить от innerHTML.
Я надеюсь, что это поможет кому-то в будущем. Ваше здоровье
response.json(): ваш PHP возвращает строку, которая не является строкой JSON (содержит HTML (<script>...), пробелы и вывод var_dump()).