«$ .ajax не является функцией», но только если вызов находится внутри функции - PullRequest
0 голосов
/ 02 июля 2019

Прошло много времени с тех пор, как я сейчас занимался веб-программированием, и мне удалось столкнуться с некоторыми проблемами.Вероятно, это тривиальная вещь для кого-то, но я искал немного в Интернете.Все, что я могу найти, - это различные способы решения проблемы «$ .ajax is not function» с использованием правильного источника jQuery.Я понял это.Что меня интересует, так это то, почему вызов ajax прекрасно работает, когда он не внутри функции javascript?Как только я помещаю это в функцию, я получаю проблему "$ .ajax is not function".Вот мой источник:

<script
src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"></script>

<script type="text/javascript">
function callback() {}
$(".dropdown-item").on("click", function () {
    // Does not work
    callAjax();
});

// Does not work if called from wherever
function callAjax(){
    $.ajax({
        url: '@Url.Action("ajax", "Company")',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        type: "POST",
        data: { name: "myName" },
        success: callback
    });
}

// Does work (Same as above, just outside function)
$.ajax({
    url: '@Url.Action("ajax", "Company")',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    type: "POST",
    data: { name: "myName" },
    success: callback
});
</script>

1 Ответ

2 голосов
/ 02 июля 2019

Это говорит нам о том, что некоторый код скрипта позже в файле:

  1. Вызов функции jQuery noConflict, которая освобождает идентификатор $ или

  2. Включая некоторый скрипт, который перезаписывает значение в $ (например, MooTools.js, Prototype.js или даже сам jQuery в его "тонкой" сборке)

Вы можете решить эту проблему, обернув свой код в функцию, которая использует свой собственный $, например:

(function($) {
    // ...your code here, can use `$` without worrying...
})(jQuery); // <==  Passes in `jQuery`, which is a synonym for `$`

Даже если какой-то более поздний код вызывает noConflict, или даже полностью перезаписывает $ (или даже jQuery), этот код будет продолжать работать, поскольку он получает значение jQuery на момент запуска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...