Запрос почты AJAX не будет отправлять данные JSON - PullRequest
1 голос
/ 07 июня 2011

После того, как в течение последних нескольких часов я пытался отладить это, прислонившись к стене, я наконец решил обратиться за помощью.

У меня есть такие данные, которые я хочу отправитьОбработчик Ashx (это много данных).

var value = [{"start":["3,0"],"block":["0,0","1,2"],"end":["2,1"],"star":"gold","moves":3,"difficulty":"easy"},{"start":["1,0"],"block":["1,3","3,0","4,2"],"end":["0,1"],"star":"gold","moves":4,"difficulty":"easy"},{"start":["3,0"],"block":["0,0","0,2","2,0","3,2"],"end":["1,0"],"star":"silver","moves":4,"difficulty":"easy"},{"start":["3,0"],"block":["0,0","2,0","3,1"],"end":["1,3"],"star":"gold","moves":6,"difficulty":"easy"},{"start":["0,0","2,0"],"block":["2,3"],"end":["1,2"],"star":"gold","moves":4,"difficulty":"easy"},{"start":["2,1"],"block":["0,1","0,2","1,0","1,1","2,0","2,2","2,3","3,1","3,2"],"end":["1,3"],"star":"gold","moves":5,"difficulty":"easy"},{"start":["1,0"],"block":["0,0","3,0","2,3"],"end":["4,1"],"star":"gold","moves":5,"difficulty":"medium"},{"start":["0,0","0,4"],"block":["0,5","0,2","3,3"],"end":["1,1"],"star":"gold","moves":7,"difficulty":"medium"},{"start":["0,0","2,6"],"block":["0,5","3,3","2,1"],"end":["3,5"],"star":"gold","moves":8,"difficulty":"medium"},{"start":["4,1","4,3"],"block":["3,0","4,2"],"end":["0,1","1,4","3,2"],"star":"gold","moves":8,"difficulty":"medium"},{"start":["1,2","3,4","4,2"],"block":["0,2","3,0"],"end":["2,3"],"star":"gold","moves":9,"difficulty":"medium"},{"start":["3,1","3,6"],"block":["0,0","0,3","0,7","2,5"],"end":["2,3"],"star":"gold","moves":11,"difficulty":"hard"},{"start":["0,7","0,2"],"block":["2,0","3,2","0,6","1,6","1,7"],"end":["3,3"],"star":"gold","moves":12,"difficulty":"hard"},{"start":["0,0","0,3"],"block":["0,1","2,2","3,0","3,3"],"end":["4,2"],"star":"gold","moves":8,"difficulty":"hard"},{"start":["0,0","0,6"],"block":["0,1","1,0","1,1","2,5","3,7"],"end":["3,4"],"star":"gold","moves":13,"difficulty":"hard"},{"start":["0,0","0,2","0,4","2,0","2,4","3,2","4,0","4,4"],"block":["0,1","0,3","1,0","1,1","1,2","1,3","1,4","2,1","2,3","3,0","3,1","3,3","3,4","4,1","4,2","4,3"],"end":["2,2"]},{"start":["0,0","0,2","0,4","1,1","2,0","2,4","3,2","4,0","4,2","4,4"],"block":["0,1","0,3","1,0","1,2","1,3","1,4","2,1","2,3","3,0","3,1","3,3","3,4","4,1","4,3"],"end":["2,2"],"star":"silver","moves":42,"difficulty":"medium"},{"start":["0,0","3,3","4,0"],"block":["0,1","2,3","3,0","4,4"],"end":["0,3"],"star":"gold","moves":11,"difficulty":"hard"},{"start":["0,4","1,1","3,5","4,2"],"block":["0,0","3,1","4,1"],"end":["2,3"],"star":"gold","moves":14,"difficulty":"hard"},{"start":["0,0","3,2","3,6"],"block":["0,4","0,5","4,4"],"end":["1,1"],"star":"gold","moves":13,"difficulty":"hard"},{"start":["0,2"],"block":["0,7","4,0","4,6","5,0","6,0","6,5"],"end":["2,0"]}]

И я использую эту функцию для отправки запроса:

function storeValue(value) {
    var val = encodeURIComponent(JSON.stringify(value));
    $.ajax({
        url: "DataHandler.ashx",
        async: false,
        data: { key: "someKey", value: val, action: "store" },
        datatype: "json",
        success: function (data) {
        }
    });
};

В DataHandler.ashx, это актуальнокод:

public class DataHandler : IHttpHandler, IReadOnlySessionState
    {
        public void ProcessRequest(HttpContext context)
        {
             var query = context.Request.QueryString;
             string action = query["action"];
             string key = query["key"];
             string val = query["value"];
        }
    }

При отладке я обнаружил, что DataHander даже не вызывается.Если я удалю value из строки запроса, например:

data: { key: key, action: "store" },

Будет вызван метод ProcessRequest, как и следовало ожидать.

Я предполагаю, что value может бытьслишком долго или что-то.Почему оно не отправляется и как я могу это исправить?

1 Ответ

1 голос
/ 07 июня 2011

Когда я запускаю свой тестовый код, я вижу следующую ошибку, возвращаемую из вызова jQuery ajax:

Сведения об исключении : System.Web.HttpException: Длинастрока запроса для этого запроса превышает настроенное значение maxQueryStringLength.

Таким образом, ваша строка запроса слишком длинная (по крайней мере, для IE9, на которой я тестирую).

КакВ предложенных комментариях изменение этого параметра на POST позволяет получить доступ к методу ProcessRequest в вашем файле ASHX.

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

public void ProcessRequest(HttpContext context)
{
    var query = context.Request;
    string action = query["action"];
    string key = query["key"];
    string val = query["value"];
}

Надеюсь, это поможет!

...