2011-01-27 43 views
0

我有下面的脚本似乎不工作。 aspx页面返回类似json的脚本,在下面的脚本中已经被注释掉了。如果我将这个json直接粘贴到源数组中,它就可以很好地工作。使用asp.net生成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" 

回答

1

它看起来对我来说,这个问题可能是信号源功能。当你进行ajax调用时,它是异步完成的。所以,该函数启动ajax调用并继续,它不会为源返回任何内容。

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

你的源应该只是到URL

source: "test_array.aspx", 

参考从documentation

的数据源是一个服务器端脚本 返回JSON数据,通过 一个简单的规定源选项的URL。

+0

如果我只是用th如上所述,如何在.aspx页面返回json数据之前向.aspx页面发布值? – oshirowanen 2011-01-27 14:33:02

2

我相信你必须让ajax调用的源头到一个web服务,在你的情况下,它似乎是一个Page Method。所以,如果你在后面的页面看起来像这样的代码有一个函数:

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

您将需要从System.Web.Services命名空间装点该法[WebMethod]

因此,这将最终看起来像:

using System.Web.Services; 

...

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

HTH

编辑:你也将需要更新您的Ajax调用这个样子的来源:

source: 'test_array.aspx/GetData'