Я пытаюсь вызвать функцию C# нажатием кнопки с помощью функции JavaScript / jQuery.
Я прошел через похожие проблемы и их решения, но ни один из них не подходит для этого случая. Моя функция C# ничего не возвращает. Это функция, запускающая задание из планировщика задач. Есть ли другой способ написать функцию JavaScript, при которой функция ничего не возвращает?
Ниже приведен код.
HTML:
<button id = "btnClick" runat = "server" EnablePageMethods = "true">Replay</button>
JavaScript:
$(document).ready(function() {
$(".btnClick").on('click', function() {
$.ajax({
async: true,
url: "Home/ABVReplay",
cache: false,
});
console.info("Replayed!");
});
});
C#:
[WebMethod]
public void ABVReplay()
{
using (TaskService tasksrvc = new TaskService("<server.name>", "<username>", "<domain>", "<password>"))
{
Task task = tasksrvc.FindTask("<taskName>");
task.Run();
}
}
Задание выполняется, если я просто использую код C# в консольном приложении. Таким образом, проблем с подключением / входом в систему как таковых нет.
Код консольного приложения:
using System;
using Microsoft.Win32.TaskScheduler;
class Program
{
static void Main(string[] args)
{
using (TaskService tasksrvc = new TaskService("<server.name>", "<username>", "<domain>", "<password>"))
{
Task task = tasksrvc.FindTask("<taskName>");
task.Run();
}
}
}
Извините, только что отредактировал URL. Home - это контроллер, а ABVReplay - это функция.
@ D-Shih Я попробовал ваше предложение, все еще не сработало, и да, URL правильный.
Воспользуйтесь инструментами разработчика Chrome, чтобы показать нам заголовки запросов и ответов для запроса AJAX.
Может ли программа выполняться на веб-сервере по URL-адресу при вызове по URL-адресу просмотра?
Replayed! записывается на консоль в инструментах разработчика Chrome?
Нет, в консоли он не воспроизводится. Я также вставил точки останова в код C#, но при нажатии кнопки он даже не переходит к точке останова.
Что ж, тогда нет смысла беспокоиться о том, почему запрос ajax не работает. Если журнал консоли не создается, значит, код обработчика событий щелчка вообще не выполняется.. Пожалуйста, запустите веб-страницу и просмотрите исходный код в веб-браузере. Найдите часть HTML, где находится кнопка Replay, скопируйте и вставьте ее в свой вопрос.
@mjwills, спасибо за это! выполнил некоторый консольный журнал и обнаружил, что событие щелчка не запущено, но теперь событие щелчка работает нормально. Я нажимаю кнопку, и появляется следующая ошибка: localhost: 57114 / Главная / Главная / ABVReplay? _ = 1532094788463 404 not found. URL-адрес должен быть локальный: 57114 / Главная / ABVReplay? _ = 1532094788463, но каким-то образом он дважды показывает Home в вызове ajax. Есть идеи, как это исправить?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ваш селектор jquery необходимо изменить
$("#btnClick")
вместо
$(".btnClick")
и убедитесь, что ваш URL-адрес вызова правильный.
# выберите html-тег id
. выберите html-тег class
. представляет собой jquery class, а # представляет собой id, вы должны заменить этот код, и он должен работать.
$(document).ready(function () {
$("#btnClick").on('click', function () {
$.ajax({
async: true,
url: "Home/ABVReplay",
cache: false,
});
console.info("Replayed!");
});
});
также попробуйте: url: "/Home/ABVReplay", Какое сообщение появляется в консоли браузера? после нажатия кнопки?
Какой у вас URL-адрес веб-сервиса?