Почему мой ответ JSON пуст в вызове AJAX в ASP.NET CORE MVC?C#

Место общения программистов C#
Ответить
Anonymous
 Почему мой ответ JSON пуст в вызове AJAX в ASP.NET CORE MVC?

Сообщение Anonymous »

Я работаю над проектом ASP.NET Core MVC, в котором получаю последние изображения с FTP-сервера, сохраняю их локально, а затем отправляю эти данные во внешний интерфейс через API JSON. Интерфейс использует jQuery AJAX для получения данных JSON и соответствующего обновления пользовательского интерфейса. Однако ответ JSON от моего метода контроллера пуст, и это нарушает мою логику внешнего интерфейса.
Вот соответствующий фрагмент кода:

Код: Выделить всё

private static Dictionary _latestImages;
< /code>
HomeController.cs: 
[HttpGet]
public JsonResult GetLatestImages()
{
lock (_fileLock)
{
try
{
var jsonResult = Json(_latestImages);
Console.WriteLine("JSON response successfully prepared.");
return jsonResult;
}
catch (Exception ex)
{
Console.WriteLine($"Error while preparing JSON: {ex.Message}");
return Json(new { Error = "Error while preparing JSON." });
}
}
}
< /code>
This GetLatestImages
Метод должен вернуть словарь проектов и их последние изображения, которые динамически обновляются с помощью фоновой задачи. Однако, когда вызов Ajax сделан с фронта, ответ JSON пуст.

Код: Выделить всё

index.cshtml: 
function updateImages() {
$.getJSON('/Home/GetLatestImages', function (data) {
const currentTime = new Date().getTime();
for (const projectKey in data) {
if (!lastUpdatedTimes[projectKey]) {
lastUpdatedTimes[projectKey] = {};
}

const project = data[projectKey];
for (const folderKey in project) {
const folder = project[folderKey];
const imageBox = $(`#image-${projectKey}-${folderKey}`);
const imgTag = imageBox.find('img');
const dateTag = imageBox.find('.date');

if (folder.LocalFilePath) {
const newImageSrc = `${folder.LocalFilePath}?t=${new Date().getTime()}`;
if (imgTag.attr('src') !== newImageSrc) {
lastUpdatedTimes[projectKey][folderKey] = currentTime;
imgTag.attr('src', newImageSrc).attr('alt', 'Latest Image');
dateTag.text(`Last Taken: ${new Date(folder.LastModified).toLocaleString()}`);
}
} else {
imgTag.attr('src', '').attr('alt', '');
dateTag.text('Image Pending..');
}
}
}
}).fail(function () {
console.error("Failed to load JSON data.");
});
}
< /code>
The AJAX call fetches the data every 10 seconds and updates the images in the UI. But since the JSON response is empty, the images are never updated.

Debugging Steps I Tried
[list]
[*]Checked the _latestImages
Словарь в контроллере - он правильно заполняется данными в бэкэнд.

Код: Выделить всё

StartImageUpdateLoop
) запущен и обновляет словарь _latestImages.

[*]Проверено, что метод GetLatestImages активирован. и выполняется успешно.

[/list]
Вопросы:
  • Почему ответ Json(_latestImages) пуст, когда _latestImages заполнен?
  • Что-то не так с использованием блокировки или со способом сериализации JSON?

    Может ли это быть проблема с кэшированием, и если да, то как я могу ее отладить или решить?
    < /li>
Любые рекомендации и помощь будут очень признательны. Дайте мне знать, если потребуется дополнительная информация!

Подробнее здесь: https://stackoverflow.com/questions/793 ... t-core-mvc
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»