Сообщение в 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.info(w);
    }
});
    </script>
  <?php 
      echo $_POST['data'];
  ?>

в моем браузере я получил распечатку success, что означает, что код javascript работает нормально, я думаю, в php я получил Undefined index p.s мое имя файла - loo.php, весь код находится в том же файле

изменить: я пытался разделить свои файлы следующим образом:

my loo.php file:

    <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.info(w);
    }
});
</script>

my test.php file:

<?php echo $_POST['data']; ?>

все еще есть неопределенный индекс

p.s. Я перехожу в руководство к файлу test.php после запуска файла loo.php

Ваш вопрос такой же. Пожалуйста, проверьте это отвечать.

Inzamam Idrees 14.12.2018 06:48

Возможный дубликат jQuery Ajax передает значение на той же странице php

guradio 14.12.2018 06:50

Вы должны разделить свой код на 2 разных файла. Ваш undefined index, скорее всего, происходит при начальной загрузке страницы, когда ваши данные POST не установлены

Sean 14.12.2018 06:51

Я только что отредактировал вопрос. Думаю, я понял, что с тобой происходит

HSLM 14.12.2018 21:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
594
5

Ответы 5

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

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

jQuery исправляет сообщение, поэтому переменная $_POST будет заполнена. Нет необходимости извлекать что-либо из входного потока вручную и самостоятельно его декодировать.

M. Eriksson 14.12.2018 06:53

Попробуй это

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();
    }

Зачем вам 1. создавать для этого функцию? 2. json_encode данные, когда это строка?

M. Eriksson 14.12.2018 07:12

Ваши вопросы справедливы. 1) Для приведенного выше примера создавать отдельную функцию не нужно. Но, возможно, это стоит сделать, если вам нужно создать ОДИН обработчик для ВСЕХ запросов Ajax. 2) Не проводить дополнительную проверку типа данных, если мы не знаем тип входящих данных.

Альберт Аллагулов 14.12.2018 10:04

1. Конечно, но тогда вы бы не создавали его внутри оператора if, поскольку тогда он будет существовать только в том случае, если этот конкретный оператор if будет оценен как истинный. Тогда вы не сможете повторно использовать ту же функцию. 2. Проблема с json-кодировкой строки заключается в том, что, хотя это действительный json, javascript не сможет правильно ее проанализировать. Javascript принимает объекты и массивы только как json.

M. Eriksson 14.12.2018 13:17

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

$ _POST - это массив, отправленный запросом HTTP Post. поэтому, если запрос к странице с именем test.php или что-то еще не является запросом HTTP POST, массив $ _POST будет пустым. но массив $ _GET может содержать некоторые данные, если вы их отправили. а переход на страницу - это запрос на получение этой страницы, если вы не использовали форму с method = "post". так что то, что вы делаете с вызовом ajax, правильно. но переход к test.php вручную без формы с методом post не заполнит массив $ _POST. потому что, когда вы выполняете вызов Ajax, он выполняется, он просто выполняет пост-вызов правильно, и все в порядке, но когда вы переходите на эту страницу, это запрос на получение, и он не заполняет массив $ _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.info(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']: ''
?>

Вы получаете эту ошибку, потому что при загрузке страницы запрос 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.info(w);
    }
});
</script>

данные всегда не существуют, это моя главная проблема.

R3ter 14.12.2018 17:54

@ R3ter Где именно вы это проверяете? Если делать это с помощью console.info(w) - неправильно. Вам следует использовать console.info(response).

Victor 14.12.2018 20:05

Другие вопросы по теме