2011-05-03 70 views
1

jQuery的:jQuery用户界面自动完成不会显示返回的JSON(PHP)

$("[type=text]").autocomplete({ 
source: "json.php", 
minLength: 0 
}).addClass("ui-widget ui-widget-content ui-corner-left"); 

如果我改变源正常工作:一个JS阵列。我知道PHP是反正工作,因为我可以在控制台中看到它,但这里是样本PHP:

$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); 
echo json_encode($arr); 

所以下拉只是没有显示。现在感觉非常愚蠢。

+0

PHP中的JSON被编码为一个对象,而不是数组。我并不熟悉jQuery.autocomplete,但它是否期待数组呢? { 'A':1, 'B':2, 'C':3} VS [ 'A', 'B', 'C'] – drowe 2011-05-03 18:15:04

+0

甚至当我试图返回:'回声“ ['opt1','opt2','opt3','opt4']“;'从php页面,它什么也不做。我也尝试添加dataType:“json”,选项和没有。 – jreed121 2011-05-03 18:43:04

+1

问题是你需要json对象中的'label'或'value'属性来自动渲染渲染,否则你需要一个自定义选择函数 – Dalen 2011-05-03 21:02:48

回答

2

在你的json.php文件中,确保在你的echo之前通过header()函数将内容编码设置为json。这样jQuery应该将数组看作适当的json。

header("Content-Type: application/json"); 
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); 
echo json_encode($arr); 
+0

...我加了,但仍没有。 – jreed121 2011-05-03 20:40:03

1

http://jqueryui.com/demos/autocomplete/remote-jsonp.html

入住这从演示站点获取。

$("#city").autocomplete({ 
      source: function(request, response) { 
       $.ajax({ 
        url: "http://ws.geonames.org/searchJSON", 
        dataType: "jsonp", 
        data: { 
         featureClass: "P", 
         style: "full", 
         maxRows: 12, 
         name_startsWith: request.term 
        }, 
        success: function(data) { 
         response($.map(data.geonames, function(item) { 
          return { 
           label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName, 
           value: item.name 
          } 
         })); 
        } 
       }); 
      }, 
      minLength: 2, 
      select: function(event, ui) { 
       log(ui.item ? 
        "Selected: " + ui.item.label : 
        "Nothing selected, input was " + this.value); 
      }, 
      open: function() { 
       $(this).removeClass("ui-corner-all").addClass("ui-corner-top"); 
      }, 
      close: function() { 
       $(this).removeClass("ui-corner-top").addClass("ui-corner-all"); 
      } 
     }); 
+0

我不这么认为,我在控制台中得到响应文本。 – jreed121 2011-05-03 19:56:43

+0

是的,但是您不在控制台中执行此代码?什么是网站结构? /subpage/my_form.php和/subpage/json.php,你可以得到这样的json.php吗?在浏览器中检查你的javascript错误 – Dinatih 2011-05-03 20:05:32

+0

正在谈论浏览器的控制台窗口(实际上是萤火虫)。反正json.php是在相同的目录,我试着你上面提出的建议 - 仍然没有。我看到responsetext,但页面上没有任何反应。 – jreed121 2011-05-03 20:39:16

1

几天前,我还遇到了JSON填充的自动完成问题。

我的问题是,我是不设置内容类型,如上面沃利说:

header("Content-Type: application/json"); 

我也是一个包裹里面的getJSON jQuery的我自动完成呼叫,那么将使用该函数的数据来填充自动填充字段。我的直觉告诉我,额外的getJSON应该不是必须的,但像你一样,我遇到了将我的PHP文件作为源代码的问题。

$.getJSON("json.php", function(data) { 
    $("[type=text]").autocomplete({ 
     dataType: "json", 
     source: data, 
     minLength: 1, 
    }); 
}); 

由于我使用旧的PHP版本,我手工制作了我的JSON。我包含“标签”和“值”字段,因为我相当肯定他们是自动完成工作所必需的。

$jsonList = "[{"label" : "Item 1", "value" : "1"}, {"label" : "Item 2", "value" : "2"}]"; 
return $jsonList; 
相关问题