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

时间:2013-06-10 09:58:02

标签: jquery ajax arrays

我有以下代码,用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"}

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

3 个答案:

答案 0 :(得分:2)

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

您必须先解析响应。您可以通过修复dataType属性:

让jQuery为您执行此操作
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>');

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

答案 2 :(得分:0)

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