JQuery自动完成调用中的撇号

时间:2011-10-26 16:40:04

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

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

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();
    }

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:4)

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

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

我的jQuery语法可能有些偏差,但希望能传达出我想说的内容。

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

注意:额外的单引号是mySQL和SQL Server中单引号的“转义字符”。你没有提到你正在使用的RDBMS,所以它可能与你不同。

强制性:您可能知道这一点,但希望您不会在服务器端使用SQL查询连接“request.term”值。这会让你容易受到SQL Injection =)

的攻击

答案 2 :(得分:2)

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

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

这很有效。它是自动完成插件或jquery的东西。由于这有效,我将使用它并继续前进。

感谢所有建议。顺便说一下,没有任何逃脱对我有用......

再次感谢...