Как поймать массив данных в файле 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"]);

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

Другие вопросы по тегам