我有一个页面使用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
答案 0 :(得分:2)
不是传递JSON字符串,而是传递一个对象,jQuery应该正确编码它以便提交:
data: {'EditorHTML': _sftabs_rTxtRep.GetHTML(), 'Actions' : GetActions() , 'Notes': GetNotes() }
来自$.ajax
manual(data
选项下):
要发送到服务器的数据。它将转换为查询字符串 if 不是字符串。它附加到GET请求的URL。看到 processData选项可防止此自动处理。对象必须 是键/值对。如果value是一个数组,jQuery序列化多个 具有相同键的值基于传统设置的值 (如下所述)。