AO1411 Ответов: 1

Функция Javascript вызывается при загрузке страницы


Всем привет.

Я боролся со своими функциями javascript, когда они выполнялись при загрузке страницы, и, похоже, не могу понять, почему.

После моих @page, @model, @using и @inject я добавил свой javascript-код, завернутый в head.
Я знаю, что эта функция больше нигде не вызывается в коде, потому что я написал совершенно новую функцию, которую никогда не планирую использовать, кроме как для проверки того, что может вызвать проблему во время отладки.

Вот мой код:
@page
@model ////model


<head>

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

            function test() {
                @{

            Console.WriteLine("test function");} 

            }
    

    </script>


</head>


Что я уже пробовал:

Я попытался найти любую скобку, вызывающую эту проблему, но ничего не нашел.
Я удалил все остальное на своей странице только для того, чтобы убедиться, что функция не вызывается из какого-то другого кода.

Я также попытался обернуть эту функцию в голову

ZurdoDev

Если вы помещаете код JavaScript в тег скрипта, а он не находится в функции, он будет запущен. В противном случае что-то должно вызвать функцию, чтобы она действительно работала.

AO1411

Но это функция, и она все еще выполняется при загрузке страницы?

j snooze

Наверное глупый вопрос с моей стороны но если это обычный javascript то почему у вас это есть

функциональный тест() {
@{

Приставка.WriteLine("тестовая функция");}

}

вместо

функциональный тест() {

Приставка.WriteLine("тестовая функция");
}

Я думал, что символ @ сообщает странице ее код c#, javascript не должен нуждаться в этом для выполнения. Конечно, я не очень много играл с новыми вещами blazor.


...неважно, возможно, вы пытаетесь запустить код c# в функции javascript??

AO1411

@Дж повтора
Да, в моем "нормальном" коде я использую AJAX для вызова функции на стороне контроллера. Но даже когда я не использую C#, он все равно работает.

1 Ответов

Рейтинг:
9

Dave Kreskowiak

Он запускается каждый раз, потому что вы запускаете клиент и сервер на своей машине разработчика одновременно.
То @Console.WriteLine("..."); выполняется, когда сервер обрабатывает страницу, а не когда запускается javascript.

Вы видите сообщение об этом выводе в окне Output (Debug) в Visual Studio, правильно? Если бы это был код javascript, выводящий это сообщение, Вы бы не увидели его в Visual Studio.

Чтобы увидеть вывод фактического кода javascript, вы бы заменили приведенную выше строку просто console.log("...");.

function test() {
    console.log("test function");
}

Вывод этого кода будет осуществляться в окне консоли браузера, а не в Visual Studio. Нажмите F12 в браузере, чтобы увидеть там консоль отладки.


AO1411

Мой исходный код использует функцию ajax для вызова контроллера. Но дело в том, что он должен вызывать контроллер только после того, как пользователь нажал кнопку. Для URL-адреса ajax я использовал метод @Url.Action() C#. Значит, это невозможно?

Richard Deeming

С помощью @Url.Action в вашем представлении Razor будет выдавать строку в разметку, которая отправляется обратно пользователю. Использование этой строки в качестве URL-адреса для AJAX-запроса является совершенно разумным подходом и будет нет вызвать функцию JavaScript для выполнения не вызывал.

Возможно, вам следует обновить свой вопрос с помощью фактического кода, с которым у вас возникли проблемы.

AO1411

Я верю, что ваше решение заставило меня понять, что происходит. Спасибо!

Dave Kreskowiak

Razor - это шаблонный движок. Код, который вы туда вставляете, не выполняется на клиенте. Он выполняется на сервере для построения HTML-кода, который отправляется обратно клиенту.

Я думаю, что именно здесь у вас возникают проблемы с пониманием того, что происходит.

Возможно, вам захочется пройти через код, как он выполняется на вашем DEV-компьютере, и то, что происходит в браузере в инструментах F12 там же.