Как поймать массив данных в файле 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, который является массивом?
3 ответа
Как вы это называете, 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 на сервере.
Это интересно, я не сталкивался с этим раньше, и немного забавно, как jQuery справляется с этим.
Я попробовал этот jQuery для проверки прохождения массива:
var arr = ["val1", "val2", "val3"];
$.ajax({
url: "ApiPage.aspx",
data: ({myArr: arr}),
success: function (data) {
// do something
}
});
Я смог получить массив в.ashx следующим образом:
Request.QueryString["myArr[]"].Split(',')
$.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"]);
таким образом, вы можете отправить более одного значения в строке запроса и получить значения, используя имя строки запроса, которую вы отправляете.