1

我有以下代码使用 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所做的那样。(警报后)请帮助我如何访问这三个!

4

3 回答 3

2

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

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

dataType: "json" // dataType, not datatype

在回调内部,data现在将是一个 JavaScript 对象,您只需直接访问它的属性(了解更多关于MDN 中的对象 - 使用对象):

success: function (data) {
    $("#results").html('<label>'+data.ptitle+': '+data.category+'</label><br>');
}

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


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

var $results = $('#results');
$results.empty();
$.each(data, function(i, obj){ 
    $results.append('<label>'+obj.ptitle+' is in '+obj.category+'</label><br>'); 
});
于 2013-06-10T10:02:04.903 回答
0

您的问题是您误解了 jQuery 的each()功能。回调函数的原型是function(index, value)index 为“pcode”、“category”、“ptitle”,value 分别为“22”、“NightTalk”、“HourlyNightTalk”。

于 2013-06-10T10:09:26.543 回答
0

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

alert(data.ptitle)

或者,在你的情况下

$("#results").html('<label>'+data.ptitle+': '+data.category+'</label><br>');

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

于 2013-06-10T09:59:45.253 回答