也许我不理解这个概念(我是一个AJAX / javascript / Web新手)。我正在使用JQuery自动完成功能,如果我指定一个小的,有限的项目平面文件(suggestions.xml),该函数工作正常,但当我使用实际的生产数据文件(3 MB)的建议脚本不起作用一点都不
所以我创建了一个基于文本框中的字符生成XML的Web服务,但看起来这个JQuery不会在每个按键上运行,而是仅在页面首次加载时运行。显然,为了使这个函数有用,它需要在用户输入到输入字段时动态获取结果。
$(document).ready(function () {
var myArr = [];
$.ajax({
type: "GET",
// this line always sends the default text; not what the user is typing
url: "Suggestions.aspx?searchString=" + $("input#txtSearch").val(),
dataType: "xml",
success: parseXml,
complete: setupAC,
failure: function (data) {
alert("XML File could not be found");
}
});
function parseXml(xml) {
//find every query value
$(xml).find("result").each(function () {
myArr.push({ url: $(this).attr("url"), label: $(this).attr("name") + ' (' + $(this).attr("type").toLowerCase() + ')' });
});
}
function setupAC() {
$("input#txtSearch").autocomplete({
source: myArr,
minLength: 3,
select: function (event, ui) {
$("input#txtSearch").val(ui.item.label);
window.location.href = ui.item.url;
//alert(ui.item.url + " - " + ui.item.label);
}
});
}
});
在服务器上,我希望看到一些与用户在搜索框中输入的字符相对应的请求,但我得到一条消息:
2013-10-18 22:02:04,588 [11] DEBUG baileysoft.mp3cms.Site - QueryString params: [searchString]:'Search'
我的平面建议文件似乎是JQuery要处理的大文件,我的Web服务脚本永远不会被调用,除非首次加载页面。
如果我无法在用户输入时回到数据库(通过我的网络服务)获取建议,如何在用户在搜索框中输入时动态生成建议?
答案 0 :(得分:0)
好的,我把它全部搞定了。
在ASPNET端;我创建了一个表单来接收和响应AJAX:
Response.ContentType = "application/json";
var term = Request.Form["term"];
var suggestions = GetSuggestions(term); // Database results
if (suggestions.Count < 1)
return;
var serializer = new JavaScriptSerializer();
Response.Write(serializer.Serialize(suggestions);
在AJAX方面,我修改了js功能:
$("input#txtSearch").autocomplete({
minLength: 3,
source: function (request, response) {
$.ajax({
url: "Suggestions.aspx",
data: { term: $("input#txtSearch").val() },
dataType: "json",
type: "POST",
success: function (data) {
response($.map(data, function (obj) {
return {
label: obj.Name,
value: obj.Url
};
}));
}
});
},
select: function (event, ui) {
$("input#txtSearch").val(ui.item.label);
window.location.href = ui.item.value;
}
});
现在一切都按预期工作了。
希望这可以帮助其他可能会陷入困境的人试图找出ASPNET的JQuery内容。