使用asp.net自动完成生成的json

时间:2011-01-27 13:54:56

标签: asp.net jquery json jquery-ui jquery-ui-autocomplete

我有下面的脚本似乎不起作用。 aspx页面返回的json类似于下面脚本中已注释掉的json。如果我将json直接作为数组直接放入源代码中,它就能完美运行。

但是当我尝试使用下面的脚本时,我没有收到任何错误消息或任何内容,当我输入自动填充字段时没有任何反应。

$(document).ready(function(){
    $('#button').click(function() {
        alert($("#txtAllowSearchID").val()); 
    }); 

    //var $local_source = [ {id:0,value:"c++"}, {id:1,value:"java"}, {id:2,value:"php"}, {id:3,value:"coldfusion"}, {id:4,value:"javascript"}, {id:5,value:"asp"}, {id:6,value:"ruby"} ]; 

    $("#txtAllowSearch").autocomplete({
        source: function(request, response) {
            $.ajax({
                type: "POST",
                url: "test_array.aspx",
                data: "{'prefixText': '" + $('#txtAllowSearch').val() + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(data) {
                    response(data.d);
                },
                failure: function(errMsg) {
                    $('#errMessage').text(errMsg);
                }
            });
        },
        select: function (event, ui) {
            $("#txtAllowSearch").val(ui.item.value); // display the selected text
            $("#txtAllowSearchID").val(ui.item.id); // save selected id to hidden input
        }
    });
});

编辑:我认为问题出在aspx页面中:

objSQLCommand = New SqlCommand("select id, value from table1 where value like '%@prefixText%'", objSQLConnection)
objSQLCommand.Parameters.Add("@prefixText", SqlDbType.VarChar, 255).Value = "ing"

2 个答案:

答案 0 :(得分:2)

我相信您必须将ajax调用的源代码发送到Web服务,在您的情况下,这似乎是一个Page方法。因此,如果您的代码在页面后面有一个函数,则如下所示:

public static List<string> GetData(string prefixText){ }

您需要使用[WebMethod]命名空间中的System.Web.Services修饰该方法。

所以它最终会是这样的:

using System.Web.Services;

...

[WebMethod()]
public static List<string> GetData(string prefixText){ }

HTH

编辑:你还需要更新你的ajax调用,看起来是这样的来源:

source: 'test_array.aspx/GetData'

答案 1 :(得分:1)

在我看来,问题可能是源功能。进行ajax调用时,它是异步完成的。因此,该函数启动ajax调用并继续,它不会为源返回任何内容。

我在加载屏幕时发现了这一点。如果我在ajax调用后关闭加载屏幕,则不会出现加载屏幕。我不得不在ajax调用成功和错误事件中移动它以使其出现并正确消失。

您的来源应该只是对网址的引用

source: "test_array.aspx",

来自documentation

  

数据源是服务器端脚本   返回通过指定的JSON数据   source-option的简单URL。