【问题标题】:autocomplete not accepting the json object for source自动完成不接受源的 json 对象
【发布时间】:2016-09-11 19:33:55
【问题描述】:

下面是输入文本元素的jsp页面标签:

<input name="searchTextSpan" id="searchTextSpan" type="text"/>

下面是在 dcument.ready 上加载的 ajax 调用:

AUI().use("liferay-portlet-url", function(A) {
    var resourceURL = Liferay.PortletURL.createResourceURL();
    resourceURL.setPortletId("app_war_portlet");
    resourceURL.setResourceId(resourceId);
    require(["dojo/request", "dijit/registry", "dojo/on", "dojo/domReady!"], function(request){
          request.post(resourceURL.toString(), {
              query: ajaxData,
              handleAs: "json"
          }).then(function(data){
              if(resourceId == 'inputTextClick'){
                  AUI().use("liferay-portlet-url", function(A) {
                        var resourceURL =   Liferay.PortletURL.createResourceURL();
                            resourceURL.setPortletId("app_war_portlet");
                        if(data.cachetmpArr!=null && data.cachetmpArr.length>0){
                            var cacheList = JSON.stringify(data.cachetmpArr);
                            cacheList = cacheList.replace(/"/g, "'");
                            console.log('cacheList12 '+cacheList);//['106182233','206182233','306182233'];
                                     $('#searchTextSpan').autocomplete({
                                                width: 300,
                                                max: 10,
                                                delay: 100,
                                                minLength: 1,
                                                autoFocus: true,
                                                cacheLength: 1,
                                                scroll: true,
                                                highlight: false,
                                                source:cacheList,
                                             }).focus(function(){
                                             $(this).autocomplete("search", "");
                                             });
                        }
                  });

              }

          });
    })
})

源属性不接受它抛出 404 url​​ 错误的 cacheList。 你能建议吗

【问题讨论】:

  • 我认为你甚至没有得到 JSON。所以你可能需要调试调用服务器失败的原因。
  • 我确实得到了 json 对象值 console.log('cacheList12 '+cacheList);//['106182233','206182233','306182233'];这就是我得到的。如果我给出 cacheList=['106182233','206182233','306182233'] 之类的值,它可以工作!但直接传递对象它不会捡起
  • 好的。然后,您需要在将 JSON 传递给自动完成之前解析它。 JSON.parse(cacheList)。请记住,JSON 是 string,而自动完成需要 array

标签: javascript ajax liferay-6 jquery-autocomplete


【解决方案1】:

在将 JSON 传递给 autocomplete 之前,您需要 parse

像这样:

$('#searchTextSpan').autocomplete({                                               


 width: 300,
    max: 10,
    delay: 100,
    minLength: 1,
    autoFocus: true,
    cacheLength: 1,
    scroll: true,
    highlight: false,
    source:JSON.parse(cacheList), // parse JSON response
    }).focus(function(){
    $(this).autocomplete("search", "");
});

【讨论】:

  • 我没有收到任何错误,但我之前搜索的记录没有可见的下拉列表:(如果我记录这个 console.log('vals '+JSON.parse(cacheList)); 它给我空白....
  • 另外,您使用focus 方法的原因是什么?你能试着把它去掉吗?
  • 是的,我也尝试过删除焦点方法,但之前搜索的值仍然没有可见的下拉菜单..
  • 以前搜索过的值是什么意思?
  • console.log('cacheList12 '+cacheList);//['106182233','206182233','306182233'];这将具有已搜索的值,下次我在输入文本框中键入 10.... 我应该以 106182233 的形式进入下拉列表,这将出现在我之前搜索的缓存列表中,该缓存列表被解析为源.
猜你喜欢
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 2020-04-02
  • 2012-05-08
  • 1970-01-01
相关资源
最近更新 更多