Как получить массив данных в файле ashx?

#.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"]);
  

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