0

我是 JSON 新手,并试图弄清楚如何让这个真正简单的自动完成功能与一些格式化的响应一起工作。(我看到的所有 jquery 自动完成都使用我宁愿远离的巨大的 ui 库)。

这是我到目前为止所拥有的:

$(function() {
     // u check
     $('#search-input').keyup(function() { 
     $.ajax({ 
            dataType: 'jsonp',
            type: "POST", 
            url: "/includes/myautocomplete/tags.php", 
            data: "callback=autocomplete&q="+$('#search-input').val(), 
            jsonp: 'autocomplete',
            success: function(json){
                $('#search-resp').html(json);
            }
        });
    }); 

});

我正在尝试使用以下格式格式化响应:

function autocomplete(json) {
  var html ='<ul>';
  for(i=0;i<json.length;i++) {
    var n = json[i];
    html = '<li>'+n['tagname']+'</li>';
  }
  html = '</ul>';
  return html;
}

我的 PHP 看起来像:

# JSON-encode the response
$json_response = json_encode($array);

# Optionally: Wrap the response in a callback function for JSONP cross-domain support
if($_POST["callback"]) {
   $json_response = $_POST["callback"] . "(" . $json_response . ")";
}

# Return the response
echo $json_response;

我究竟做错了什么?先感谢您。

4

3 回答 3

0

对于初学者,你永远不会调用你的格式函数

你有:

success: function(json){
      $('#search-resp').html(json);
}

它试图将完整的响应对象作为 html 插入到元素中。

假设您的autocomplete函数正确解析返回的数组或对象,您的代码应该看起来更像:

success: function(json){
      var jsonFormattedToHtml=autocomplete(json)
      $('#search-resp').html(jsonFormattedToHtml);
}

编辑

您的 html 格式化代码有几个缺陷。

最大的一个是您需要在第一次定义它之后html使用html +=而不是连接。html=使用=only 会清除之前设置的任何值,因此您的函数的输出将只是关闭</ul>

格式化程序中的对象属性也与显示的数据不匹配。

这是一个工作演示

http://jsfiddle.net/vgbK8/2/

于 2013-03-31T15:47:21.990 回答
0

我相信你需要先解析json:

success: function(data){
  var json = $.parseJSON(data);
  //then display it...
}
于 2013-03-31T15:42:53.080 回答
0

简单的自动完成文本框

只需将 JS 库包含在<head>

<script type="text/javascript" src="http://services.iperfect.net/js/IP_generalLib.js"></script>

<body>标签中:

<input type="text" name="testne" id="testneer" onkeypress="IP_autoComplete('http://services.iperfect.net/ajax/countries.php?name=',this.id,'testDiv',event,'')">
<div id='testDiv'></div>
于 2016-04-22T12:28:38.940 回答