1) Если вы ищете способ работы во всех браузерах, то самым безопасным способом является отправка синхронного AJAX на сервер. Это не хороший метод, но, по крайней мере, убедитесь, что вы не отправляете слишком много данных на сервер, а сервер работает быстро.
2) Вы также можете использовать асинхронный запрос AJAX, и используйте функцию ignore_user_abort на сервере (если вы используете PHP). Однако ignore_user_abort сильно зависит от конфигурации сервера. Убедитесь, что вы хорошо его протестировали.
3) Для современных браузеров вы не должны отправлять запрос AJAX. Вы должны использовать новый метод navigator.sendBeacon для отправки данных на сервер асинхронно и без блокировки загрузки следующей страницы. Поскольку вы хотите отправить данные на сервер до того, как пользователь переместится с страницы, вы можете использовать этот метод в обработчике события unload .
$(window).on('unload', function() {
var fd = new FormData();
fd.append('ajax_data', 22);
navigator.sendBeacon('ajax.php', fd);
});
Также кажется, что быть полигоном для sendBeacon . Применяется синхронный AJAX, если метод не доступен изначально.
ВАЖНО ДЛЯ МОБИЛЬНЫХ УСТРОЙСТВ: Обратите внимание, что обработчик событий unload не гарантируется для мобильных телефонов. Но ожидается, что событие visibilitychange будет запущено. Поэтому для мобильных устройств вашему коду сбора данных может потребоваться небольшая настройка.
Вы можете ссылаться на мою статью в блоге для реализации кода всеми тремя способами.
Вам нужно сделать метод возвращаемого типа json на стороне сервера. Затем вызовите его из вашего метода get и сделайте ваш метод на стороне сервера, заполните список и верните этот список путем преобразования формата JSON.
То, что вам нужно понять, это поток вашего запроса. если вы строго хотите сделать это в событии Page_Loag
, то, я полагаю, вам придется создать в вашем Javascript
метод, который будет принимать ваши данные в качестве параметра, а затем вызывать метод Javascript из C# CodeBehind
, предполагая, что данные в параметре имеют формат JSON
. Этот метод работает, но не очень эффективен.
Другой способ заключается в том, что со своей стороны JQuery
вы должны сделать ajax
вызов вашего WebMethod
вашего номера в CodeBehind
, который фактически отправит ответ в формате JSON
. Это более чистый способ сделать это.
Ваш JQuery должен выглядеть следующим образом:
$(document).ready(function(){
$.ajax({
method: "GET", accept: "application/json; charset=utf-8;",
url: 'MyPage.aspx/GetDataFromDB', success: function(data){
console.log('Success Response in JSON: ' + data.d); // notice *data.d*, Calling from WebMethods returns the object encoded in the .d property of the object.
}, fail: function(err){
console.log(err);
}
});
});
И ваш CodeBehind
должен выглядеть следующим образом:
[WebMethod]
public static string GetDataFromDB()
{
var myData = YourDbCall(); // Some method to retrieve data from database
var body = new
{
Firstname = myData.Firstname,
Lastname = myData.Lastname,
Email = myData.Email,
// Any Other Information
};
var json = JsonConvert.SerializeObject(body);
return json;
}
РЕДАКТИРОВАТЬ Вот как ваш набор слов будет отправьте обратно как JSON:
[WebMethod]
public static string GetDataFromDB()
{
List<Words> WordsSet = Words.GetWords("Business");
return JsonConvert.SerializeObject(WordsSet);
}
Убедитесь, что вы установили Newtonsoft.JSON
из Nuget Package Manager Console
. если нет, вы можете открыть консоль диспетчера пакетов и запустить эту команду:
PM> Install-Package Newtonsoft.Json