JSON解析问题

我是一个在jQuery中使用JSON解析的完整菜鸟。 以为我收到了回复…我的数据是这样的:

Array( [1]=>abc, [3]=>mango, [4]=>apple, [5]=>fruits ) 

通过这种方式,我希望此列表显示为自动完成列表。 我在用。

  jQuery("#name").autocomplete( '', { multiple: true, mustMatch: true, matchContains: true, autoFill: false, dataType: "json", parse: function(data) { return jQuery.map(data, function(item) { return { data: item, value: item.label, result: item.label}; }); }, formatItem: function(item) { return item.label; }, formatResult: function(item) { return item.id; }, formatMatch: function(item) { return item.label; } }); 

我想要显示列表时的值,即我的数据中的标签。 当我选择标签时,它应该显示标签。 但在提交时,它实际上应该提交密钥。 我的意思是我想让它作为HTML的选择框工作。

返回JSON

  [{"id":1,"label":"Mehdi Hassan"},{"id":2,"label":"Jagjit Singh"},{"id":3,"label":"Suresh Vadekar"}] 

你的JSON似乎不是一个数组,只是一个对象(哈希映射)。 查看官方文档 :

预期的数据格式

来自本地数据,url或回调的数据可以有两种变体:

  • 字符串数组:[“Choice1”,“Choice2”]

  • 具有标签和值属性的对象数组:[{label:“Choice1”,value:“value1”},…]

在您的情况下,它应采用以下格式:

 [ {"1":"Shad.aab"}, {"158":"Adadad"}, {"159":"Asdadad"}, {"166":"Abbas"}, {"167":"Sdadad"}, {"171":"Shadaab Please check it out"}, {"173":"Check This Please"}, ] 

(请记住,左侧是标签,右侧值,我想在您的数据中,所有都应该颠倒…)

如果我理解正确,您希望使用自动填充来填充名称文本字段,但希望利用与表单POST中的名称相关联的其他值。

[如果您能够使用最新的jQueryUI版本的自动填充] – 在http://jqueryui.com/demos/autocomplete/#custom-data上的“自定义数据和显示”自动完成示例之后,您将在自动完成时看到提示,它们显示所选标签,但是,它们还会在隐藏输入中保存关联值,该输入也会发布回服务器。 鉴于您当前的json格式:

HTML:

      ... 

JS:

  

php POST目标:

  

问题看起来像是在这里:

 jQuery("#name").autocomplete( '', { multiple: true, ... 

它应该是这样的:

 jQuery("#name").autocomplete( { source: '', multiple: true, ... 

还要确保在加载/就绪时使用它,而不仅仅是在普通的

 $(function(){ jQuery("#name").autocomplete(); }); 

使用firebugvalidation当您在该字段中键入字母时,它会向源页面集发送请求以进行自动完成。

以下是我用来重新创建/修复问题的代码:

的index.php

         

index_json.php

  

我对你的请求非常困惑,但已经采用你的代码并使它按你指定的方式工作(我认为)。

当我从我的数据中显示list.ie标签时,我想要价值。 当我选择标签时,它也应该显示标签。 但在提交时,它实际上应该提交密钥。 我的意思是我希望它作为HTML的选择框工作。

它几乎听起来好像你想要一个仅用于搜索的输入框和一个静态选择列表,它从自动完成更改但保留在那里而不是消失...

你需要在后端做json_encode($your_array)

它会将PHP数组转换为您的前端(jQuery)可以解析和处理的JSON编码字符串。

我不确定我理解你的问题。 但是在我的经历中我遇到了同样的要求。 我从上面的链接使用了ajax autocomplete js 。 (通过链接获取完整的详细信息)

这里的亮点是,这个js为你提供了一个回调onSelect ,你可以在选择自动完成建议后设置你的值。

json编码的字符串应该是这样的

 query:'Li', suggestions:['Mahendi Hassan','Libyan Arab Jamahiriya','Liechtenstein','Lithuania'], data:['1','2','3','4'] 
  • 查询 – 原始查询值
  • 建议 – 逗号分隔的建议值数组
  • data(可选) – 数据数组,包含选择数据时回调函数的值。

现在在form有一些隐藏的input字段,并将所选建议的数据设置为该隐藏input字段的值。

 jQuery(function () { options = { minChars: 2, serviceUrl: "ur/php file", onSelect: function (value, data) { $('#hiddenUserProfileIdProps').val(data); //Setting value to hidden field } }); a = $('#enterEmailLink').autocomplete(options); a.disable(); }); 

然后提交表格。 而已。