我有这个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
(在第二个中)(还要注意空格!)我在jquery ajax documentation中读到,应该将
smart
设置为false,因为它是用于querystring的东西。我添加了processData: false
但我仍然在
processData
之前得到这个词。我不想使用&
,因为它将把encodeURIComponent
变成&
(或类似的东西)。我需要的是将保存到数据库的完整值amp;
,long & elegant
。我怎样才能做到这一点?编辑
smart & beautiful
没有帮助!该函数没有事件被调用。用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)
做到了。但是谁能帮助我了解它是如何工作的?我以为可以将
{ argRemarks: argRemark }
转换为&
,但是不是吗?我现在要向该方法接收的参数正是我想要的,&
,long & elegant
,smart & beautiful
不会转换特殊字符吗? 最佳答案
您确实需要对argRemark
进行编码。最简单的方法是让jQuery为您完成这项工作:
data: { argRemarks: argRemark }
这与
data: 'argRemarks=' + argRemark
的不同之处在于,jQuery通过传入一个对象来假定它需要对该对象的属性值进行URL编码-而如果传入一个字符串,则需要事先对其进行正确编码。