Как получить файл JSON с сервера? (ASP.NET)

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 будет запущено. Поэтому для мобильных устройств вашему коду сбора данных может потребоваться небольшая настройка.

Вы можете ссылаться на мою статью в блоге для реализации кода всеми тремя способами.

0
задан S. Ellis 18 January 2019 в 16:05
поделиться

2 ответа

Вам нужно сделать метод возвращаемого типа json на стороне сервера. Затем вызовите его из вашего метода get и сделайте ваш метод на стороне сервера, заполните список и верните этот список путем преобразования формата JSON.

0
ответ дан Mohammad Mansoor 18 January 2019 в 16:05
поделиться

То, что вам нужно понять, это поток вашего запроса. если вы строго хотите сделать это в событии 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
0
ответ дан Jamshaid Kamran 18 January 2019 в 16:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: