我有这个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
的内容,包含&
的内容,我只会在&
之前获得第一部分,{{ 1}}(在第一种情况下),long
(在第二种情况下)(也注意空格!)
我在jquery ajax documentation中读到,应该将 smart
设置为false,因为它是用于查询字符串的东西。我添加了
processData
但我仍然在processData: false
之前得到这个词。我不想使用&
,因为它会将encodeURIComponent
转换为&
(或类似的东西)。我需要的是将保存到数据库的完整值amp;
,long & elegant
。我怎么能这样做?
编辑 执行smart & beautiful
没有帮助!该函数不会调用事件。用firebug运行它,并在错误函数中设置断点,我得到了这个
{ argRemarks: argRemark }
更新2: 做
[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]"
做了这个伎俩。但任何人都可以帮助我理解这是如何工作的?我认为它会将data: 'argRemarks=' + encodeURIComponent(argRemark)
转换为&
,但事实并非如此?我现在收到的方法参数正是我想要的, &
,long & elegant
,smart & beautiful
不会转换特殊字符?
答案 0 :(得分:7)
你做需要对argRemark
进行编码。最简单的方法是让jQuery为你完成这项工作:
data: { argRemarks: argRemark }
这与data: 'argRemarks=' + argRemark
不同,通过传入一个对象,jQuery假定它需要对该对象上的属性值进行URL编码 - 而如果传入一个字符串,则需要事先已正确编码。
答案 1 :(得分:2)
您必须先对字符串进行URL编码:
data: 'argRemarks=' + encodeURIComponent(argRemark)