我有一个Ajax调用。
该方法定义为:
问题是,如果用户输入像
我在jquery ajax文档中读到,应该将
function addNewRemarksToDataBase(argRemark) {
if (argRemark != '') {
// if not blank
$.ajax({
url: '../AutoComplete.asmx/AddNewRemarks',
type: 'POST',
timeout: 2000,
datatype: 'xml',
cache: false,
data: 'argRemarks=' + argRemark,
success: function (response) {
// update the field that is source of remarks
updateRemarksSource();
},
error: function (response) {
}
});
}
};
该方法定义为:
[WebMethod]
public void AddNewRemarks(string argRemarks)
{
BAL.BalFactory.Instance.BAL_Comments.SaveRemarks(argRemarks, Globals.BranchID);
}
问题是,如果用户输入像
long & elegant
或者smart & beautiful
这样包含&
的内容,我只能获取到&
之前的第一部分,即long
(在第一个例子中),smart
(在第二个例子中)(注意空格!)我在jquery ajax文档中读到,应该将
processData
设置为false,因为它是用于查询字符串或其他用途的。我添加了processData: false
但我仍然在获取&
之前的术语。 我不想使用encodeURIComponent
,因为它会将&
转换为amp;
(或类似的内容)。 我需要的是完整值long & elegant
,smart & beautiful
,这将保存到数据库中。 我该怎么做?
编辑执行{ argRemarks:argRemark }
没有帮助! 该函数甚至没有被调用。 在firebug中运行并在错误函数中设置断点,我得到了这个:
[Exception... "Component does not have requested interface" nsresult: "0x80004002 (NS_NOINTERFACE)" location: "JS frame :: http://localhost:49903/js/jquery-1.8.1.min.js :: .send :: line 2" data: no]"
更新2: 进行中
data: 'argRemarks=' + encodeURIComponent(argRemark)
这个方法解决了我的问题。但是有没有人能帮我理解这是如何工作的?我以为它会把&
转换为&
,但它没有这样做?现在我收到的方法参数正是我想要的,长和优雅
,聪明和美丽
,不是encodeURIComponent()
将特殊字符转换吗?
&
转换为&
是HTML实体编码,与此完全无关;URL编码是将&
转换为%26
。但在两种情况下,接收方在处理数据之前都会解码,编码只是为了让数据通过“不友好”的渠道而不受损害。 - Jon