я хочу отправить / передать данные с клиента на сервер (ajax на php), но когда я пытаюсь этот код
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript">
$.ajax({
type: 'post',
url: 'loo.php',
data: { data: 'some data' },
success: function(response,w) {
console.log(w);
}
});
</script>
<?php
echo $_POST['data'];
?>
в моем браузере я получил success
распечатать, что означает, что код JavaScript работает нормально, я думаю, в PHP я получил Undefined index
p.s мое имя файла loo.php
весь код находится в одном файле
редактировать: я пытался отделить мои файлы, как это:
мой файл loo.php:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript">
$.ajax({
type: 'post',
url: 'test.php',
data: {data: 'some data'},
success: function (response, w) {
console.log(w);
}
});
</script>
мой файл test.php:
<?php
echo $_POST['data'];
?>
все еще получил неопределенный индекс
постскриптум после запуска файла loo.php я перехожу по «Руководству» в файл test.php
Вы получаете эту ошибку, потому что при загрузке страницы запрос POST еще не был отправлен. Так покажи представленные data
только если он существует, в противном случае покажите код JavaScript.
<?php
if (isset($_POST['data'])) {
die($_POST['data']);
}
?>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript">
$.ajax({
type: 'post',
url: 'loo.php',
data: {data: 'some data'},
success: function (response, w) {
console.log(w);
}
});
</script>
Попробуй это.
<?php
$data = json_decode(file_get_contents('php://input'), true);
echo $data['data'];
?>
Попробуй это
HTML-файл
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="data_value"></div>
<script type="text/javascript">
$( document ).ready(function() {
$.ajax({
type: 'post',
url: 'loo.php',
data: { data: 'some data' },
success: function(response,w) {
$("#data_value").html(response);
}
});
});
PHP-файл (loo.php)
<?php
print_r($_POST);
?>
попробуйте изменить обработчик следующим образом:
if(isset($_POST['data'])){
function return_data() {
die(json_encode($_POST['data'])));
}
return_data();
}
Ответьте после редактирования вопроса:
$ _POST — это массив, отправленный запросом HTTP Post. поэтому, если запрос к странице с именем test.php или чем-то еще не является HTTP POST-запросом, массив $ _POST будет пустым. но массив $ _GET может содержать некоторые данные, если вы их отправили.
и переход на страницу является запросом на получение этой страницы, если вы не использовали форму с method = «post».
так что то, что вы делаете с вызовом ajax, правильно. но переход к test.php вручную без формы с методом post не приведет к заполнению массива $ _POST.
потому что, когда вы делаете Ajax-вызов, он выполняется, он просто делает пост-вызов правильно, и все в порядке, но когда вы переходите на эту страницу, это запрос get, и он не заполняет массив $ _POST.
для этого вам вообще не нужен ajax. Вы можете иметь эту форму
<form method="POST" action="test.php">
<input type="text" name="data" value="some data" />
<input type="submit" value="submit" />
</form>
либо вы используете ajax и обрабатываете все, что хотите, в методе успеха ajax. или используйте форму и отправьте запрос на страницу и обработайте его там.
ответ на вопрос перед редактированием
Если они находятся в одном файле, он не будет работать таким образом, потому что, когда файл загружает $ _POST [‘data’], он вообще не существует, а после запуска вызова ajax он существует в этом вызове, а не в окне вашего браузера.
так что вы можете проверить, существует ли $ _POST [‘data’], поэтому вы отправляете его из вызова ajax, чтобы вы могли вернуть его и использовать в своей функции успеха ajax.
заключение:
вы не можете поместить их в один и тот же файл и ожидать, что ajax загрузится до фактического php.
сначала он загрузит весь файл, затем запустит ajax.
неопределенный индекс с сервера прежде чем вы даже увидите страницу HTML.
Решение может быть:
Файл с вашими функциями html и ajax index.html
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript">
$.ajax({
type: 'post',
url: 'loo.php',
data: { data: 'some data' },
success: function(response,w) {
// use the response here
console.log(w);
}
});
</script>
а другой с твоей логикой loo.php
<?php
header("Content-Type: text/plain"); // if you want to return a plain text
// if you want to return json it could be header('Content-type: application/json');
echo isset($_POST['data'])? $_POST['data']: ''
?>