如何访问jquery ajax函数返回的数组字符串

我有以下代码,用onkeyup事件搜索在搜索框中键入的字符。

$("#keywords").keyup(function () { var kw = $("#keywords").val(); if (kw != '') { var url = "" + kw; $.ajax({ type: "POST", url: url, datatype: "json", success: function (data) { **alert(data);** $.each(data,function(ptitle, category){ $("#results").html('
'); } } }); }else{ $("#results").html(""); return false; } });

在上面的代码中,当我提醒data它显示以下数组字符串。

 {"pcode":"22","category":"NightTalk","ptitle":"HourlyNightTalk"} 

我似乎无法访问pcodecategoryptitle就像我在下一行中所做的那样。 (提醒后)请帮助我如何访问这三个!

这意味着data是一个字符串,响应是一个简单的JSON编码对象,而不是一个数组。

您必须先解析响应。 您可以通过修复dataType属性让jQuery为您执行此操作:

 dataType: "json" // dataType, not datatype 

在回调中, data现在是一个JavaScript对象,您只需直接访问其属性(了解有关MDN中对象的更多信息- 使用对象 ):

 success: function (data) { $("#results").html('
'); }

在这里使用$.each是没有意义的。 查看文档 ,了解它的function和工作原理。


你提到有时你实际上得到了一个arrays。 在这种情况下,您可能想要使用$.each 。 为了使代码更简单,我建议始终从服务器返回一个数组:

 var $results = $('#results'); $results.empty(); $.each(data, function(i, obj){ $results.append('
'); });

你必须进入该物业。 试试这个:

 alert(data.ptitle) 

或者,在你的情况下

 $("#results").html('
');

示例 http://jsfiddle.net/CcJEX/

你的问题是你误解了jQuery的each()函数。 回调函数的原型是function(index, value) ,其中索引将是“pcode”,“category”,“ptitle”,值将分别为“22”,“NightTalk”,“HourlyNightTalk”。