我有以下代码,用onkeyup事件搜索搜索框中键入的字符。
$("#keywords").keyup(function () {
var kw = $("#keywords").val();
if (kw != '') {
var url = "<?php echo base_url().'index.php/simpromotions/livesearch/';?>" + kw;
$.ajax({
type: "POST",
url: url,
datatype: "json",
success: function (data) {
**alert(data);**
$.each(data,function(ptitle, category){
$("#results").html('<label>'+ptitle+': '+category+'</label><br>');
}
}
});
}else{
$("#results").html("");
return false;
}
});
在上面的代码中,当我警告data
时,它显示以下数组字符串。
{"pcode":"22","category":"NightTalk","ptitle":"HourlyNightTalk"}
我似乎无法访问pcode
,category
和ptitle
,就像我在下一行中所做的那样。 (警告后)
请帮助我如何访问这三个!
答案 0 :(得分:2)
这意味着data
是一个字符串,响应是一个简单的JSON编码对象,而不是一个数组。
您必须先解析响应。您可以通过修复dataType
属性:
dataType: "json" // dataType, not datatype
在回调中,data
现在将是一个JavaScript对象,您只需直接访问其属性(了解MDN - Working with Objects中对象的更多信息):
success: function (data) {
$("#results").html('<label>'+data.ptitle+': '+data.category+'</label><br>');
}
在这里使用$.each
是没有意义的。 Have a look at the documentation了解它的作用及其运作方式。
你提到过,有时你实际上会得到一个阵列。在这种情况下,您可能想要使用$.each
。为了简化您的代码,我建议始终从服务器返回一个数组:
var $results = $('#results');
$results.empty();
$.each(data, function(i, obj){
$results.append('<label>'+obj.ptitle+' is in '+obj.category+'</label><br>');
});
答案 1 :(得分:0)
您必须输入该属性。试试这个:
alert(data.ptitle)
或者,在您的情况下
$("#results").html('<label>'+data.ptitle+': '+data.category+'</label><br>');
答案 2 :(得分:0)
你的问题是你误解了jQuery的each()
功能。回调函数的原型是function(index, value)
,其中索引将是“pcode”,“category”,“ptitle”,值将分别为“22”,“NightTalk”,“HourlyNightTalk”。