AJAX, Html-кодирование и хэш-символ не работают должным образом (C # и JQuery) - PullRequest
0 голосов
/ 22 июля 2011

У меня есть текстовое поле, которое принимает vartitle и генерирует этот vartitle в кодированную HTML-переменную, которая передается в мой URL для ajax.

Вот пример моей строки параметров, переданной моему вызову ajax:

 method=savecat&templatename=percentdistribution&dropzone=Column_1&datasetid=31&subjectid=28&varnumber=1155&origin=&codes=1@0@&values=Satisfied%20with%20job%20overall@Not%20satisfied%20with%20job%20overall@&vartitle=%26%23&missingvalues=-3,-7,-9

Как вы можете видеть в конце, vartitle =% 26% 23.

Для примера выше я набрал & # в своем текстовом поле.Эта последовательность & # делает что-то, чтобы прервать мой вызов ajax.Если я что-то еще наберу, ajax работает отлично.

Что мне не хватает?

Мой вызов ajax ниже:

 function SendAjax(webPageName, queryParams, triggerFunction)
 {    


      alert(queryParams); //is the string mentioned above   
      alert(webPageName); //is the valid page name: BGPPS.aspx


     var date = new Date();
     var unique = date.getDay() + date.getHours() + date.getMinutes() + date.getSeconds() + date.getMilliseconds();

     $.ajax(
     {
         type: "POST",
         url: webPageName,
         data: queryParams+'&'+unique,
         success: triggerFunction
    });
}

Ответы [ 3 ]

1 голос
/ 22 июля 2011

Редактировать: По умолчанию ASP.Net не допускает публикации, которые выглядят как атаки XSS.Очевидно, ASP.Net считает, что &# может использоваться в атаках XSS.Вы можете отключить это поведение для данной страницы, добавив ValidateRequest="false" к вашей директиве @Page:

<%@ Page Language="C#" ... ValidateRequest="false" %>

Это должно решить ее за вас.


MyОригинальный ответ:

Не беспокойтесь о кодировании аргументов.Позвольте jQuery кодировать ваши POST-аргументы, передавая ему карту пар ключ-значение, которые вы хотите передать:

$.ajax({
    type: "POST",
    url: webPageName,
    data: {
        method: "savecat",
        templatename: "percentdistribution",
        dropzone: "Column_1",
        datasetid: "31",
        subjectid: "28",
        varnumber: "1155",
        origin: "",
        codes: "1@0@",
        values: "Satisfied with job overall@Not satisfied with job overall@",
        vartitle: "&#",
        missingvalues: "-3,-7,-9"
    },
    success: triggerFunction
});
1 голос
/ 22 июля 2011

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

См. Этот вопрос переполнения стека о том, как это сделатьчто: Кодировать URL в JavaScript?

0 голосов
/ 22 июля 2011

Я думаю, что jQuery сделает это за Вас. Просто дайте ему объект.

$.ajax({
  type: "POST",
  url: webPageName,
  data: {var1: 'foo', var2: 'bar'},
  success: triggerFunction
});
...