我有这个 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)
成功了。但是任何人都可以帮助我了解这是如何工作的吗?我以为它会转换&
为,&
但它没有?我现在收到的方法参数正是我想要的,long & elegant
,smart & beautiful
,不encodeURIComponent()
转换特殊字符?