【问题标题】:Apostrophe in JQuery Autocomplete CallJQuery自动完成调用中的撇号
【发布时间】:2011-12-15 21:29:24
【问题描述】:

以下代码在搜索任何不包含撇号的名称时有效。当您尝试查找姓名中带有撇号的人时,它会失败(返回错误)。我怎样才能找到带撇号的人?

function autoComplete() {
$(document).ready(function () {
    $(".AutoCompleteClass").autocomplete({
        source: function (request, response) {
            $.ajax({
                url: "/Service/NomineeWebService.asmx/GetMatchingActiveDirectoryUsers",
                data: "{ 'SearchCharacters': '" + request.term + "' }",
                dataType: "json",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataFilter: function (data) { return data; },
                success: function (data) {
                    response($.map(data.d, function (item) {
                        return {
                            id: item.NomineeUserName,
                            value: item.NomineeLastNameFirstName + " - " + item.NomineeDomainAndUserName,
                            data: item
                        }
                    }))
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert(textStatus);
                }
            });
        },            
        delay: 150,
        minLength: 3,            
        select: function (event, ui) {
            $('.SelectedUserNameWrapper input[type=hidden]').val(ui.item.id);
        }       
    });
});
$('#AutoCompleteTextBox').keypress(function (event) {
    if (event.which == '13') {
        alert('test');
        $('#AutoCompleteButton').click();
    }

【问题讨论】:

  • 什么是错误,ajax调用的输出是什么,是javascript中的错误还是服务器端的错误?
  • 警告框即将出现,但只是说“错误”。它不返回消息。它正在查询的数据库名称中带有撇号,所以我不怀疑服务器端发生了什么。
  • 听起来单引号(在您的输入中)可能需要在用于查询数据库之前进行转义。
  • 这不起作用:数据:"{ 'SearchCharacters': '" + request.term.replace("'", "\'") + "' }",
  • 什么数据库系统?通常(我认为)要转义单引号,您想使用另一个单引号('')。如果不这样做,我会删除我的答案 - 我只知道我以前遇到过。

标签: c# asp.net jquery-ui autocomplete jquery-ui-autocomplete


【解决方案1】:

我找到了解决这个问题的方法,我们应该用转义字符替换所有“'”。代码如下所示

    function autoComplete() {
$(document).ready(function () {
    $(".AutoCompleteClass").autocomplete({
        source: function (request, response) {
request.term = request.term.replace(/'/gi,"\\'"); // replace globally

【讨论】:

    【解决方案2】:

    听起来单引号(在您的输入中)可能需要在用于查询数据库之前进行转义。尝试将 AJAX 调用的“数据”部分替换为以下内容:

    data: "{ 'SearchCharacters': '" + request.term.replace("'", "''")  + "' }",
    

    我的 jQuery 语法可能有点偏离,但希望能传达我想说的意思。

    如果这样做,您可能会在以后遇到其他特殊字符的问题。

    注意:额外的单引号是 mySQL 和 SQL Server 中单引号的“转义字符”。您没有提及您使用的是什么 RDBMS,因此您可能会有所不同。

    强制性:您可能知道这一点,但希望您没有将“request.term”值与服务器端的 SQL 查询连接起来。这会让你容易受到SQL Injection =)

    【讨论】:

    • @MikeRichards 好收获!我的复制/粘贴失败。
    【解决方案3】:

    有点古怪,但我最终做了这样的替换:request.term.replace("'", "%27")

    然后在我的网络服务上,我截取并替换回使用撇号: SearchCharacters = SearchCharacters.Replace("%27", "'"); 并将其传递给我的数据库调用。

    这行得通。它是自动完成插件或 jquery 的东西。既然这行得通,我将使用它并继续前进。

    感谢所有建议。顺便说一句,没有一个逃脱对我有用......

    再次感谢...

    【讨论】:

    • 谢谢这对我也有用...我尝试了上面的一些解决方案,但它们没有用...但是这个成功了! request.term.replace("'", "%27")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 2012-04-23
    • 1970-01-01
    相关资源
    最近更新 更多