кодирование данных текстового поля для вызова jquery json ajax - PullRequest
1 голос
/ 26 июля 2011

У меня есть страница, на которой сохраняются некоторые данные из текстовых полей во внутреннем интерфейсе с помощью вызова jjery ajax, таким образом:

function saveAsYouGo(){
     $.ajax({
        type: "POST",
        url: "Report.aspx/SaveReport",
        data: "{'EditorHTML': '" + _sftabs_rTxtRep.GetHTML() + "', 'Actions' : '" + GetActions() + "', 'Notes': '" + GetNotes() + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            lastHTMLVal = _sftabs_rTxtRep.GetHTML();
            alert(msg.d);
        }
      });
}

GetActions и GetNotes в основном просто извлекают текст из нескольких текстовых полей вдоль строкэто

function GetActions(){
    var na = [];
    $('#optionsTable :checkbox:checked').each(function(){
        var textVal, idVal;
        textVal = $(this).parent().parent().next("td").find("textarea").val();
        idVal = $(this).attr("id");
        if(textVal != ""){
            na.push(idVal, textVal);
        }
    });
    return na;
}

, но когда в текстовых областях есть кавычки и т. д., он прерывает вызов ajax.Я немного искал JSON.stringify, но, похоже, это ничего не меняет.Я предполагаю, что есть способ закодировать текст перед отправкой, так что я могу расшифровать его на другом конце, прежде чем делать то, что нужно сделать ..?

, как и любая другая помощь, очень радостно полученная благодаря

РЕДАКТИРОВАТЬ нашел эти маленькие драгоценные камни, которые помогают для большинства вещей

function htmlEncode(value){
  return $('<div/>').text(value).html();
}

function htmlDecode(value){
  return $('<div/>').html(value).text();
}

однако вышеприведенные НЕ РАБОТАЮТ для работы с кавычками, насколько я могу судить инижеследующее, в котором предлагалось расставить кавычки вокруг элементов данных, не сработало вообще.

data: {'EditorHTML': _sftabs_rTxtRep.GetHTML() , 'Actions' : GetActions(), 'Notes':GetNotes()},

Какие-нибудь другие идеи?это сводит меня с ума

РЕДАКТИРОВАТЬ 2

просто обернул textVal в побег, таким образом:

if(textVal != ""){
    cn.push(idVal, escape(textVal));
}

спасибо

физ

1 Ответ

2 голосов
/ 26 июля 2011

Вместо передачи строки JSON просто передайте объект, и jQuery должен правильно его кодировать для отправки:

data: {'EditorHTML': _sftabs_rTxtRep.GetHTML(), 'Actions' : GetActions() , 'Notes': GetNotes() }

Из $.ajax руководства (под dataопция):

Данные для отправки на сервер.Он преобразуется в строку запроса, , если это еще не строка. Он добавляется в URL для GET-запросов.См. Параметр processData, чтобы предотвратить эту автоматическую обработку.Объект должен быть парой ключ / значение.Если значение является массивом, jQuery сериализует несколько значений с одним и тем же ключом на основе значения традиционной настройки (описанной ниже).

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