Как решить эту «Uncaught ReferenceError: $ не определено»

У меня есть код, в котором мне нужно обновить столбец таблицы (MySQL), вызывая другой файл php, не покидая страницы, где некоторые таблицы могут разрешать встроенное редактирование.

У меня есть точка в php-эхо страницы, где можно щелкнуть значок, чтобы сохранить ввод. Код на тот момент такой:

<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<?php
$sql = "SELECT * FROM table WHERE a_column='certain_value'";
if (mysqli_query($conn, $sql)) {
    $result = mysqli_query($conn, $sql);
    if (mysqli_num_rows($result) > 0) {
        while($row = mysqli_fetch_assoc($result)) {
            $note = $row["note"];
            $code = $row["code"];
        }
    }
}
// some tabled elements not relevant for the issue
echo "<input type='text' id='note_1' name='note_1' value=$note readonly>";
echo "<input type='text' id='new_note' name='new_note'>";
echo "<img src='icon_to_click.png' id='icon_to_click' name='icon_to_click' >";
?>

<script type = "text/javascript">

$(document).ready(function() {
    $('#icon_to_click').click(function() {
        var note_orig = document.getElementById('note_1').value;
        var code_val = '<?php echo "$code" ?>';
        var note_new = document.getElementById('new_note').value;
        if (note_new != note_orig) {
            $.ajax({
                type: 'POST',
                url: 'update_notes.php',
                data: {'code': code_val, 'note': note_new},
                success: function(response){
                    document.getElementById('note_1').value = note_new;
                }
            });
        }
    });
});

Соответствующий код update_notes.php:

<?php 

// connection

$unsafe_note = $_POST["note"];
$code = $_POST["code"];
require "safetize.php"; // the user input is made safe
$note = $safetized_note; // get the output of safetize.php

$sqlupdate = "UPDATE table SET note='$note' WHERE code='$code'";
if (mysqli_query($conn, $sqlupdate)) {
    echo "Note updated";
} else {
    echo "Problem in updating";
}

// close connection

?>

Теперь, когда я запускаю код и смотрю на инструмент, он выдает ошибку: Uncaught ReferenceError: $ не определен, связывая ошибку с этой строкой предыдущего кода js:

$(document).ready(function() {

Итак, как я могу это исправить?

попробуйте Ctrl + F5 и увидите ошибку на вкладке консоли

Hien Nguyen 12.05.2019 14:14

Похоже, ваш код запускается до загрузки jquery. Попробуйте изменить код document.ready на document.addEventListener('DOMContentLoaded', (event) => { //the event occurred })

Dmytro Huz 12.05.2019 14:18

Вы уверены, что включили jQuery в свой HTML?

Anis R. 12.05.2019 14:21

@ Anis R.: как видно из кода, <script src = "ajax.googleapis.com/ajax/libs/jquery/3.2.1/…> может загрузить jQuery

gab 12.05.2019 14:22

@ Дмитрий Гуз: не могли бы вы изложить для меня более процедурно?

gab 12.05.2019 14:24

Я также пробовал $(window).on('load', function() вместо $(document).ready(function() , но ничего не изменилось

gab 12.05.2019 14:30

@ Hien Nguyen: готово, при нажатии на ошибку появляется «анонимная функция».

gab 12.05.2019 14:38

Возможный дубликат Uncaught ReferenceError: $ не определен?

Breakpoint 15.05.2019 12:48

@gab проверьте из консоли, что jQuery был правильно загружен. Похоже не загружается

Lelio Faieta 15.05.2019 12:49
Поведение ключевого слова "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) для оценки ваших знаний,...
0
9
12 162
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Эй, я столкнулся с той же ошибкой днем ​​​​ранее, это потому, что вы пропустили использование необходимого скрипта библиотеки jquery. пожалуйста, попробуйте использовать обновленный Jquery CDN. :) Это определенно поможет ИЛИ включите файл jquery.js перед любыми файлами плагинов jquery.

Я нашел опечатку в одном из включенных файлов перед вызовом jquery, включая вызов, и это было причиной неправильной работы jquery. Но тем не менее некоторые мелкие проблемы все же были

gab 19.05.2019 13:56
Ответ принят как подходящий

Это означает, что вы пытались использовать Jquery в своем коде Javascript без вызова библиотеки Jquery или код вызывается без полной загрузки библиотеки.

Я заметил :

  • Что вы не закрыли свой тег сценарий
  • Вы используете Jquery, поэтому вы можете использовать $('#id_name') для выбора элемента по идентификатору вместо document.getElementById('note_1')
  • Получите значение элемента, используя Element.val() вместо Element.value

Попробуйте отредактировать код следующим образом

<?php
    $sql = "SELECT * FROM table WHERE a_column='certain_value'";
    if (mysqli_query($conn, $sql)) {
        $result = mysqli_query($conn, $sql);
        if (mysqli_num_rows($result) > 0) {
            while($row = mysqli_fetch_assoc($result)) {
                $note = $row["note"];
                $code = $row["code"];
            }
        }
    }
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset = "UTF-8">
        <title>Some title</title>
    </head>
    <body>
        <form method = "post" accept-charset = "UTF-8">
            <input type='text' id='note_1' name='note_1' value=<?= $code ?> readonly>";
            <input type='text' id='new_note' name='new_note'>";
            <img src='icon_to_click.png' id='icon_to_click' name='icon_to_click' >";
        </form>
        <script>
            $(document).ready(function() {
                $('#icon_to_click').click(function() {
                    var note_orig = $('#note_1').val();
                    var code_val = '<?= $code ?>';
                    var note_new = $('#new_note').val();
                    if (note_new != note_orig) {
                        $.ajax({
                            type: 'POST',
                            url: 'update_notes.php',
                            data: {'code': code_val, 'note': note_new},
                            success: function(response){
                                $('#note_1').val() = note_new;
                            }
                        });
                    }
                });
            });
        </script>
    </body>
</html>

Element.value устарел в пользу element.val(), или это просто неправильный синтаксис?

gab 19.05.2019 13:59

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