#.net #asp.net #ajax #ashx
#.net #asp.net #ajax #ashx
Вопрос:
Мой AJAX-код
$.ajax({
url: "AnswerHandler.ashx",
type: "GET",
data: ({ qid: keyArray , name: sName}),
async: false,
success: function(msg) {
if (msg == "success") {
alert("answer saved successfully!");
}
else{
alert("answer saving failed!");
}
}
});
Теперь в файле AnswerHandler.ashx я получаю данные имени с помощью следующей строки
string name = context.Request.QueryString["name"];
Но как я могу получить qid, который является массивом?
Комментарии:
1. какой тип qid используется во время выполнения?
Ответ №1:
Это интересно, я раньше с этим не сталкивался, и немного забавно, как jQuery справляется с этим.
Я попробовал этот jQuery, чтобы протестировать передачу массива:
var arr = ["val1", "val2", "val3"];
$.ajax({
url: "ApiPage.aspx",
data: ({myArr: arr}),
success: function (data) {
// do something
}
});
Я смог получить массив в .ashx следующим образом:
Request.QueryString["myArr[]"].Split(',')
Ответ №2:
То, как вы его вызываете, jQuery попытается сериализовать ваш элемент «data» в строку запроса. Я не уверен, что ваш формат данных будет успешно сериализован. Если это так, вы должны иметь возможность посмотреть Context.Request.Объект QueryString и выясните, как он форматируется, и переходите оттуда.
Другой подход заключался бы в:
$.ajax({
url: "AnswerHandler.ashx",
type: "POST",
processData: false,
data: ({ qid: keyArray , name: sName}),
async: false,
success: function(msg) {
if (msg == "success") {
alert("answer saved successfully!");
}
else{
alert("answer saving failed!");
}
}
});
ProcessData: false сообщает jquery не сериализовывать ваши данные, а вместо этого отправлять их «сырыми» на сервер. На вашем сервере вы можете использовать Context.Request.InputStream для чтения этих необработанных байтов и десериализации json на сервере.
Ответ №3:
$.ajax({
url: "AnswerHandler.ashx?qid" 125487,
type: "GET",
data: ({ qid: keyArray , name: sName}),
async: false,
success: function(msg) {
if (msg == "success") {
alert("answer saved successfully!");
}
else {
alert("answer saving failed!");
}
}
});
А в файле ashx вы можете получить значения в виде
int attId = Convert.ToInt32(context.Request.QueryString["qid"]);
таким образом, вы можете отправить более одного значения в строке запроса и получить значения, используя имя отправляемой вами строки запроса.