пользовательский HTTP-ответ, C # и .ajax()?

#c# #asp.net #ajax #json #httpresponse

#c# #asp.net #ajax #json #httpresponse

Вопрос:

Я пытаюсь запросить базу данных, содержащую информацию о «тикете», используя метод jQuery .ajax()

 $.ajax({
    type: 'GET',
    url: 'Preview.ashx',
    data: 'ticketID='   ticketID,
    success: function (data) {

        // 'data' should be a row from the database, so it should be like an
        // array that contains each column of the row
        // do stuff with this data
    }
});
  

… так что все работает нормально. У меня возникли проблемы с data переменной. На стороне сервера я делаю…

 // get the ticket ID from the POST parameter
int ticketID = context.Request["ticketID"] != null ? Convert.ToInt32(context.Request["ticketID"]) : -1;
if (ticketID >= 0) {

    // grab the data from the database, getInfo() will retrieve the row
    // in the DB that corresponds to the ticket ID given, returning an 
    // ArrayList with all of the information
    ArrayList theTicket = getInfo(context, ticketID);

    // now, I need to somehow return this information so that I could deal with it
    // in the 'success' callback function above
    return;
} else {

    // something went wrong with the 'newTicket' POST parameter
    context.Response.ContentType = "text/plain";
    context.Response.Write("Error with 'ticketID' POST parameter. n");
    return;
}
return;
  

Я достаточно отладил это, чтобы быть уверенным, что ArrayList содержит правильную информацию. Теперь мне просто нужно вернуть его.

Как бы мне это сделать? Как мне вернуть данные в ArrayList? Возможно ли структурировать ответ так, чтобы я мог выполнять data.ID , data.otherColumnName и т.д. в функции обратного вызова для доступа к различным полям?

Комментарии:

1. возможно ли использовать какую-либо библиотеку java scrip? json был бы хорошим ключевым словом здесь. Если нет, преобразуйте данные в xml, отправьте их в виде текста и проанализируйте на клиенте.

Ответ №1:

Да, это возможно. Взгляните на JSON. Вы можете использовать классы JavaScriptSerializer или DataContractJsonSerializer для сериализации объектов в формате JSON. Также взгляните на эту ссылку

Вы могли бы использовать ContentType application / json, и телом будет строка, которую вернет один из вышеупомянутых сериализаторов. Вы могли бы использовать тот же код, что и в вашем операторе else

Комментарии:

1. @archil … 1. this link не работает. 2. можете ли вы привести пример построения такого ответа?

2. @StuperUser… Я пока не совсем беспокоюсь о синтаксическом анализе на стороне клиента. Я хотел бы сначала выяснить, как создать ответ, а затем беспокоиться о его разборе. Если мне не нужно его разбирать, тем лучше, но я хочу сначала запустить его.

3. Я отредактировал свой ответ. Смотрите второй абзац и ссылку тоже. Случай тот же, что и с вашим оператором else, вам нужен тип контента и текст ответа.

Ответ №2:

Вы уже делаете правильную вещь ниже, с Response .Пишите.

Я бы изменил GetInfo, чтобы возвращать массив строк, а затем использовал String.Join.

 string[] theTicket = getInfo(context, ticketId);
Response.Write(String.Join(",", theTicket);
  

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

Лучшим вариантом было бы использовать библиотеку json и сериализовать ArrayList как json и использовать это на стороне клиента.

Комментарии:

1. Да… Я не хочу делать никакого синтаксического анализа. Должен быть способ просто вернуть его как объект, как если бы я использовал JSON. Тем не менее, я хочу пока избегать JSON … Есть ли способ сделать это без внешних библиотек?

2. @Христо — Нет. Вы выходите за границы приложения, и поэтому необходима сериализация. JSon и XML являются вашими стандартными вариантами сериализации. Что вы пытаетесь сделать с данными, когда они попадают к клиенту? Другим вариантом было бы отобразить нужный HTML-код на сервере и вернуть его, а затем использовать jquery для размещения результата на нужной странице. Это было бы самым быстрым и простым решением.

3. @NerdFury … понял. Вы абсолютно правы. Я использую решение в формате JSON. Я просто пытаюсь запросить строку из базы данных и использовать поля строки для отображения информации.