我有这个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 & elegantsmart & beautiful不会转换特殊字符吗?

最佳答案

您确实需要对argRemark进行编码。最简单的方法是让jQuery为您完成这项工作:

data: { argRemarks: argRemark }


这与data: 'argRemarks=' + argRemark的不同之处在于,jQuery通过传入一个对象来假定它需要对该对象的属性值进行URL编码-而如果传入一个字符串,则需要事先对其进行正确编码。

10-06 04:19