@Basil283

Не работает ajax сервер WAMP?

Помогите! На сервере создал папку test в нее поместил файлы index.php в котором такой код:
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>Document</title>
    <script src="jquery-3.3.1min.js"></script>
    <script src="js.js"></script>
</head>
<body>
<h1>Нажать</h1>
 
<?php
echo 'Данные приняты - '.$_POST['text'];
 
?>
 
</body>
</html>

и файл js.js в котором такой код:
$(function() {
    $('h1').click(function () {
        $.ajax({
            url: 'index.php',         /* Куда пойдет запрос */
            method: 'post',             /* Метод передачи (post или get) */
                     /* Тип данных в ответе (xml, json, script, html). */
            data: {text: 5},     /* Параметры передаваемые в запросе. */
            success: function(data){   /* функция которая будет выполнена после успешного запроса.  */
                console.log(data);            /* В переменной data содержится ответ от index.php. */
            }
        });
});
});

Когда нажимают "Нажать", в консоли появляется такое сообщение:
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>Document</title>
    <script src="jquery-3.3.1min.js"></script>
    <script src="js.js"></script>
</head>
<body>
<h1>Нажать</h1>
 
Данные приняты - 5
</body>
</html>

, т.е. ajax вроде работает. Но вот в браузере появляется ошибка: Notice: Undefined index: text in D:\Wamp\www\tost\index.php on line 12Call Stack#TimeMemoryFunctionLocation10.0008356792{main}( )...\index.php:0. Цифра 5 не выводится.

Может у меня WAMP как-то неправильно работает?
  • Вопрос задан
  • 73 просмотра
Пригласить эксперта
Ответы на вопрос 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Ошибки нужно читать, они содержат детальное описание проблемы. Разобьем вот эту ошибку на кусочки:
Notice: Undefined index: text in D:\Wamp\www\tost\index.php on line 12


1. Notice: - ошибка уровня notice, по сути даже не ошибка, а уведомление.
2. Undefined index: text - индекса "text" не существует, это говорит о том, что вы пытаетесь обратиться к индексе "text" какого-то массива, но такого индекса (элемента массива) не существует.
3. D:\Wamp\www\tost\index.php on line 12 - а вот это конкретное место в вашем коде где эта ошибка возникла. Это строка 12, она содержит вот такой код: echo 'Данные приняты - '.$_POST['text'];

Что с этим кодом не так? Вы пытаетесь вывести элемент массива $_POST под индексом "text", но еще до того, как вы отправили данные этим самым методом POST. Чтобы этого избежать, необходимо выполнить проверку:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>Document</title>
    <script src="jquery-3.3.1min.js"></script>
    <script src="js.js"></script>
</head>
<body>
<h1>Нажать</h1>
 
<?php
if (isset($_POST['text'])) {
    echo 'Данные приняты - ' . htmlspecialchars($_POST['text']);
} ?>
 
</body>
</html>


В этом случае мы сначала проверяем, чтобы данные были действительно отправлены, и только тогда их выводим. Кроме того, мы используем https://www.php.net/manual/en/function.htmlspecial... чтобы обезопасить себя.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы