Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery从XML自动完成(动态结果)_Javascript_Jquery_Xml_Ajax_Autocomplete - Fatal编程技术网

Javascript JQuery从XML自动完成(动态结果)

Javascript JQuery从XML自动完成(动态结果),javascript,jquery,xml,ajax,autocomplete,Javascript,Jquery,Xml,Ajax,Autocomplete,也许我不理解这个概念(我是AJAX/javascript/Web新手)。我使用的是JQuery自动完成功能,如果我指定了一个小的、有限项的平面文件(suggestions.xml),那么这个函数可以正常工作,但是当我使用一个实际的生产数据文件(3MB)的建议时,这个脚本根本不起作用 因此,我创建了一个web服务,该服务根据文本框中的字符生成XML,但似乎JQuery并不是在每个按键上运行,而是仅在页面首次加载时运行。显然,要使此函数发挥任何作用,它需要在用户键入输入字段时动态获取结果 $(doc

也许我不理解这个概念(我是AJAX/javascript/Web新手)。我使用的是JQuery自动完成功能,如果我指定了一个小的、有限项的平面文件(suggestions.xml),那么这个函数可以正常工作,但是当我使用一个实际的生产数据文件(3MB)的建议时,这个脚本根本不起作用

因此,我创建了一个web服务,该服务根据文本框中的字符生成XML,但似乎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服务脚本永远不会被调用,除非第一次加载页面


如果在用户键入时我无法返回数据库(通过我的web服务)获取建议,那么如何在用户在搜索框中键入时动态生成建议?

好的,我已经解决了所有问题

在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);
现在一切正常

希望这能帮助其他可能被困在为ASPNET解决JQuery问题的人

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