用jquery将&符号传递给ajax?

时间:2013-02-26 10:11:29

标签: ajax jquery

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

2 个答案:

答案 0 :(得分:7)

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

data: { argRemarks: argRemark }

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

答案 1 :(得分:2)

您必须先对字符串进行URL编码:

data: 'argRemarks=' + encodeURIComponent(argRemark)