我有这个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) {
}
});
}
};
Run Code Online (Sandbox Code Playgroud)
该方法定义为
[WebMethod]
public void AddNewRemarks(string argRemarks)
{
BAL.BalFactory.Instance.BAL_Comments.SaveRemarks(argRemarks, Globals.BranchID);
}
Run Code Online (Sandbox Code Playgroud)
问题是如果用户输入long & elegant类似的内容smart & beautiful,包含的东西&,我只得到之前的第一部分&,long(在第一种情况下),smart(在第二部分中)(也注意到空白!)
我在jquery ajax文档中读到了一个应该设置processData为false的文档,因为它是用于查询字符串的东西.我加了
processData: false
Run Code Online (Sandbox Code Playgroud)
但我仍然在这之前得到这个词&.我不想使用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]"
Run Code Online (Sandbox Code Playgroud)
更新2: 做
data: 'argRemarks=' + encodeURIComponent(argRemark)
Run Code Online (Sandbox Code Playgroud)
做了伎俩.但任何人都可以帮助我理解这是如何工作的?我以为它会转换&为&但它没有?我收到到现在的方法的参数正是我想要的,long & elegant,smart & beautiful,不encodeURIComponent()转换的特殊字符?
你也需要编码argRemark.最简单的方法是让jQuery为你完成这项工作:
data: { argRemarks: argRemark }
Run Code Online (Sandbox Code Playgroud)
这与data: 'argRemarks=' + argRemark通过传入一个对象不同,jQuery假定它需要对该对象上的属性值进行URL编码 - 而如果传入一个字符串,则需要事先对其进行正确编码.