javascript — пост в ajax с php получить мне неопределенный индекс

я хочу отправить / передать данные с клиента на сервер (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

1

Решение

Вы получаете эту ошибку, потому что при загрузке страницы запрос 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>
1

Другие решения

Попробуй это.

<?php
$data = json_decode(file_get_contents('php://input'), true);
echo $data['data'];
?>
0

Попробуй это

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);
?>
0

попробуйте изменить обработчик следующим образом:

    if(isset($_POST['data'])){
function return_data() {
die(json_encode($_POST['data'])));
}
return_data();
}
0

Ответьте после редактирования вопроса:

$ _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']: ''
?>
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector