2013-04-25 57 views
3

下面的Ajax调用包装在jQuery自动完成source函数中。检查Fiddler以及Chrome的网络控制台中的返回值,我可以看到数据正在以正确的格式返回到视图。jQuery自动完成不显示从Ajax调用返回的数据

但是,用户开始键入时出现的正常项目列表不会显示。你可以按照你想要的那样尽可能快/慢地键入,并且不会出现任何内容。

我在控制器方法(这是一个ASP MVC站点)中设置了一个断点,以确保程序的一部分正常运行,并且每次都会触发。

我只是几个星期的新jQuery,所以任何帮助将不胜感激。谢谢!

$(function() { 
    $('#DRMCompanyId').autocomplete({ 
     source: function (request, response) { 
      $.ajax({ 
       url: '@Url.Action("compSearch", "AgentTransmission")', 
       type: 'GET', 
       dataType: 'json', 
       data: request, 
       success: function (data) { 
         alert(data); 
         response($.map(function (value, key) { 
          alert(value); 
         return { 
          label: value, 
          value: key 
         }; 
        })); 
       } 
      }); 
     }, 
     minLength: 1 
    }); 
}); 

编辑

我增加了几个alerts的代码。 alert(data)将会启动,但alert(value)不会。

下面是从Chrome的调试控制台

enter image description here

返回json的副本,这里是返回一个Dictionary对象的形式的键/值对的控制器的方法。

  XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable); 
      nsmgr.AddNamespace("m", "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"); 
      nsmgr.AddNamespace("d", "http://schemas.microsoft.com/ado/2007/08/dataservices"); 

      Dictionary<string, string> companies = new Dictionary<string, string>(); 

      foreach (XmlNode childNode in parentNode) 
      { 
       if (!String.IsNullOrWhiteSpace(childNode["content"].InnerText)) 
       { 
        try 
        { 
         string name = childNode["title"].InnerText; 
         string id = childNode["content"].InnerText.Substring(0, 6); 

         companies.Add(id, name); 
        } 
        catch (Exception ex) 
        { 

        } 
       } 
      } 

      return Json(companies, JsonRequestBehavior.AllowGet); 
     } 
     catch (Exception ex) 
     { 
      results = ex.InnerException.ToString(); 
     } 

     return Json(results, JsonRequestBehavior.AllowGet); 
+0

你能展示你的json吗? – 2013-04-25 19:47:02

+0

你的意思是返回的值或它在控制器中的设置? – NealR 2013-04-25 19:52:40

+0

我的意思是返回json .. – 2013-04-25 19:54:28

回答

1

的$ .MAP函数需要一个数组/对象枚举,作为第一个参数。参考号jQuery.map

尝试改变

$.map(function (value, key) { 

$.map(data, function (value, key) { 

问候。

0

jQuery的文档:http://api.jquery.com/jQuery.map/说,$.map函数需要两个参数;第一个是一个数组。我认为你需要使用$.each方法。

我也相信在这种情况下,response是一个回调函数,您应该使用AJAX中的数据作为参数调用,如response(data)

从这里臀部射击,我认为你的成功处理程序应该是大约是这样的:

  success: function (data) { 
        var x, array = []; 
        for(x in data) { 
         array.push({ 
          label: data[x].value, 
          value: data[x].key  
         }; 
        } 
        response(data); 
      }