编码jquery json ajax调用的文本框数据

时间:2011-07-26 11:27:01

标签: jquery ajax json encoding

我有一个页面使用jquery 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;
}

但是当textareas中有引号等时,它会破坏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));
}

感谢

NAT

1 个答案:

答案 0 :(得分:2)

不是传递JSON字符串,而是传递一个对象,jQuery应该正确编码它以便提交:

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

来自$.ajax manualdata选项下):

  

要发送到服务器的数据。它将转换为查询字符串 if   不是字符串。它附加到GET请求的URL。看到   processData选项可防止此自动处理。对象必须   是键/值对。如果value是一个数组,jQuery序列化多个   具有相同键的值基于传统设置的值   (如下所述)。