#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. Я просто пытаюсь запросить строку из базы данных и использовать поля строки для отображения информации.