Как я могу отправить данные JSON на сервер ASP с помощью AJAX?

У меня есть веб-сайт, использующий ASP.NET, которому необходимо получить некоторые данные из CloudKit. Я использую CloudKit JS, получаю запись из CloudKit и отправляю данные на сервер из своего JavaScript с помощью C#. Я могу преобразовать объект JSON полученной записи в строку с помощью JSON.stringify(record);, но не могу отправить его на сервер с помощью AJAX. Вот мой код для отправки данных с помощью AJAX:

function afterRecordLoaded(record) {
            var decodedRecord = JSON.stringify(record);
            var xmlhttp = new XMLHttpRequest();
            xmlhttp.open("POST", "/receive?type=specific&" + "data = " + decodedRecord, true);
            xmlhttp.setRequestHeader("Content-Type", "application/json");
            xmlhttp.send();
}
afterRecordLoaded(record);

Когда я перехожу к консоли в инструментах разработчика браузера, я могу правильно выполнить запрос, если это делается вручную, но когда AJAX делает это, он получает ошибку HTTP 400. Другими словами, я могу выполнить запрос, когда я набираю URL-адрес ( с правильными параметрами) в адресную строку, но когда тот же URL-адрес (с теми же параметрами) используется AJAX, он не работает и возвращает ошибку HTTP 400.

Вот мой код С# для страницы, которая получает запрос:

    var token = antiforgery.GetAndStoreTokens(HttpContext).RequestToken;

    var type = Request.Query["type"];
    var data = Request.Query["data"];

    if (type == "specific")
    {
        if (data != "")
        {
            PostProcessor.processPostData(data);
        }
        else
        {
            Response.StatusCode = 400;
        }
    }

Выполняя простой поиск в Google, я вижу, что другие тоже сталкиваются с этой проблемой, и чтобы обойти ее, они используют токен защиты от подделки. Я не уверен, как реализовать токены защиты от подделки, если это необходимо. Было бы здорово, если бы у кого-нибудь было решение избавиться от ошибки HTTP 400 или внедрить токен защиты от подделки, чтобы ошибка исчезла. Извините, если этот вопрос встречается повсюду или слишком очевиден, поскольку я новичок в ASP. Спасибо.

Поведение ключевого слова "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
0
85
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

может быть, когда вы отправляете в консоль, данные не пусты. пока данные пусты с XHR в вашем коде, запрос затем введите выражение asp.net else Response.StatusCode = 400; .

я думаю, может быть, в вашем коде JSON.stringify(record) есть некоторые ошибки, чтобы ничего не возвращать.

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

var decodedRecord = JSON.stringify(record);
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "/receive?type=specific", true);
xmlhttp.setRequestHeader("Content-Type", "application/json");
xmlhttp.send(decodedRecord );

Переменная данных не пуста. Я могу получить то, что мне нужно, когда я обращаюсь к этому URL-адресу вручную. Я просто не могу этого сделать, когда это делает AJAX.

Todd 11.12.2020 02:56

когда вы делаете это вручную, я думаю, вы все еще используете xmlhttprequest в консоли, иначе вы не можете найти проблему. просто вставьте свой код выше в консоль (сначала добавьте данные записи, как это должно быть в консоли), посмотрите, что произойдет

Eason Yu 11.12.2020 03:00
Ответ принят как подходящий

Решение очень простое. Я использовал формат запроса GET, а не запроса POST. Все, что мне нужно было сделать, это изменить xmlhttp.open("POST", "/receive?type=specific&" + "data = " + decodedRecord, true); на xmlhttp.open("GET", "/receive?type=specific&" + "data = " + decodedRecord, true);.

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