3

我有这个 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(在第一种情况下),smart(在第二种情况下)(还要注意空格!)

我在jquery ajax 文档中读到应该设置processData为 false,因为它是用于查询字符串或其他东西的东西。我添加了

processData: false

但我仍然得到&. 我不想使用encodeURIComponent,因为它会变成(或类似的&东西amp;)。我需要的是完整的价值long & elegantsmart & 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]"

更新2:

data: 'argRemarks=' + encodeURIComponent(argRemark)

成功了。但是任何人都可以帮助我了解这是如何工作的吗?我以为它会转换&为,&但它没有?我现在收到的方法参数正是我想要的,long & elegant,smart & beautiful,不encodeURIComponent()转换特殊字符?

4

2 回答 2

7

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

data: { argRemarks: argRemark }

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

于 2013-02-26T10:13:28.287 回答
3

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

data: 'argRemarks=' + encodeURIComponent(argRemark)
于 2013-02-26T10:16:26.517 回答