我有这样的自动完成代码:
$("input#PickupSpot").autocomplete({
source: function(request, response){
$.ajax({
url: "AjaxSearch.aspx",
dataType: "jsonp",
data: {
a: "getspots",
c: "updateSpotList",
q: request.term
},
success: function(){
alert("Success");
},
error: function (xhr, ajaxOptions, thrownError){
alert(xhr.status);
alert(thrownError);
}
});
}
});
当我尝试获取数据时,Firebug显示错误:“updateSpotList未定义”。 我需要创建一个名为 updateSpotList 的函数来获取服务器的响应。并且永远不会调用成功警报。
为什么我需要这个功能?也许aspx中有定义的东西?它是:
string response = "";
string callback = Request.QueryString["c"];
string action = Request.QueryString["a"];
string query = Request.QueryString["q"];
//Ensure action parameter is set
if(action != null && action.Equals("getspots")){
//Ensure query parameter is set
if (query != null && query.Length > 0){
SpotListRequest request = new SpotListRequest
{
FreeText = query,
Language = "sv-SE"
};
IEnumerable<Spot> spots = DataBridge.GetSpotList(null, null, query).OrderBy(i => i.FullName);
JavaScriptSerializer js = new JavaScriptSerializer();
string json = js.Serialize(spots.ToArray());
//Ensure callback parameter is set
if (callback != null && callback.Length > 0)
{
response = String.Format("{0}('{1}')", callback, json);
}
}
}
答案 0 :(得分:1)
您可以指定URL作为源参数,而不是数据参数。
http://jqueryui.com/demos/autocomplete/#option-source
该插件将向您的服务器发出请求,您应该返回一个如下所示的JSON数组:
[{label:“Name”},{label:“Name 2”}]
将您的JavaScript代码更改为:
$("input#PickupSpot").autocomplete({
source: "AjaxSearch.aspx?a=getspots&c=updateSpotList"
});
autocomplete插件会将一个名为term的参数附加到源URL,并带有input元素的当前值,因此会请求:“AjaxSearch.aspx?a = getspots&amp; c = updateSpotList&amp; term = test “如果你在输入元素中写了测试。
在服务器上,您想将q更改为term。