пост в ajax с php получить мне неопределенный индекс - PullRequest
0 голосов
/ 14 декабря 2018

Я хочу отправить / передать данные с клиента на сервер (ajax to 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 распечатку, что означает, чтояваскрипт код работает нормально, я думаю, в php я получил Undefined index ps мое имя файла loo.php весь код находится в одном файле

edit: я пытался отделить мои файлы, как это:

мой файл 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']; ?>

все еще получил неопределенный индекс

ps я перехожу из руководства к файлу test.php после того, как я запускаю файл loo.php

Ответы [ 5 ]

0 голосов
/ 14 декабря 2018

Вы получаете эту ошибку, потому что при загрузке страницы запрос 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>
0 голосов
/ 14 декабря 2018

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

$ _ 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 голосов
/ 14 декабря 2018

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

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 голосов
/ 14 декабря 2018

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

    if(isset($_POST['data'])){
        function return_data() {
            die(json_encode($_POST['data'])));
        }
        return_data();
    }
0 голосов
/ 14 декабря 2018

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

<?php 
    $data = json_decode(file_get_contents('php://input'), true);
    echo $data['data'];
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...