既然我实际上可以获得这个JSON数据,我该如何使用它/循环呢?

时间:2012-09-21 18:10:20

标签: jquery ajax json

我正在开发我的第一个(EVER!)JSON项目,我想知道如何从JSON对象获取特定数据。我已将其导入,并且刚刚发现(谢谢堆栈溢出!)如何引用该数据。我现在能够做到这一点,下面的代码是我已经得到的。我有一堆通过数据的警报。我现在需要做的是实际循环并评估下面显示的JSON的值字段。我无法弄清楚如何选择它,以及如何循环它。我已经尝试了data.films.value.value和data.films.value.value [0]之类的东西,我确信它接近于那个,但我无法弄清楚如何获取数据进入一个形式,让我使用像常规字符串那样的特定元素。我最终要做的是将每个films.value元素与用户输入的字符串进行比较,如果我无法获得该元素,我不知道如何做到这一点!

{
    "

films": [{
        "label": "34",
        "value": "34",
        "currently_streaming": "1",
        "full_streaming_url": "http://www.url.com",
        "url": "http://www.url.com"},
    {
        "label": "A Different Color",
        "value": "A Different Color",
        "currently_streaming": "1",
        "full_streaming_url": "http://www.url.php",
        "url": "http://www.url.com"}]
}​

这是加载它的代码。它返回成功,但我无法从JSON对象获取任何数据:

 $(document).ready(function(){
    $.ajax({
        dataType: 'json',
        beforeSend : function() {
           console.log('Before Ajax Request Starts !!');
        },
        success: function(data) {
            console.log(data);
            alert("Edddddddd");
            $.each(data.films, function(i, object) {
            $.each(object, function(property, value) {
            alert(property + "=" + value);
    });
});
        },
        error : function(jqXHR, textStatus, errorThrown) {
             alert("Error occurred: " + errorThrown);
        },
         beforeSend : function() {
           console.log('Ajax Request Complete  !!');
        },
        url: 'test.php'
    });  
});

非常感谢任何和所有帮助!

更新的 我现在正在尝试使用我从大家这里得到的好建议。这就是我现在所拥有的:

    var test="34x25x36";
 $(document).ready(function(){
    $.ajax({
        dataType: 'json',
        beforeSend : function() {
           console.log('Before Ajax Request Starts !!');
        },
        success: function(data) {
            console.log(data);
            alert("Edddddddd");
            $.each(data.films, function(i, object) {
            $.each(object, function(property, value) {
            //alert(property + "=" + value);
            for (i=0; i<data.films.length; i++){
            var theFilm = (data.films[i].value);
            if (theFilm === test){
            document.write("Your movie is hot");
            document.write(theFilm);
            }
            else {
            }
            }
    });
});
        },
        error : function(jqXHR, textStatus, errorThrown) {
             alert("Error occurred: " + errorThrown);
        },
         beforeSend : function() {
           console.log('Ajax Request Complete  !!');
        },
        url: 'test.php'
    });  
});

当我尝试从循环中打印出来时,它似乎有效,但我遇到了问题。我最终需要将这些数据与一些用户输入进行比较,我在顶部将其定义为var test。我希望它比较每个变量来测试,但由于某种原因,它似乎是设置每个变量来测试。我的循环有问题吗?

4 个答案:

答案 0 :(得分:0)

尝试

films[0].label会给你34

要迭代,您需要使用

$.each(data.films, function(i, object) { 
// And Not 
$.each(json.films, function(i, object) {

试试这个

更新后的代码:

因为eacy arrach项目是一个Object,你需要再写一个循环来访问它们内部的内容..

$.each(data.films, function() {
    $.each(this, function(j, val) {
        console.log('Key - ' + j + ' :: Value - ' + val);
    });
});​

这应该适合你的情况

function(data) {
    console.log(data);
    alert("Edddddddd");
    $.each(data.films, function(i, object) {
        $.each(object, function(property, value) {
            alert(property + "=" + value);
        });
    });
}​

//使用For循环

var keys = ["label", "value", "currently_streaming", "full_streaming_url", "url"]
for (i = 0; i < data.films.length; i++) {
    for (j = 0; j < keys.length; j++) {
        alert( 'Key - ' + keys[j] + ' :: Value - ' + data.films[i][keys[j]] )  ;
    }
}​

检查FIDDLE

答案 1 :(得分:0)

试试这个:

success: function(data) {
  for (var item in data.films) {
    alert(item.label);
  }
}

答案 2 :(得分:0)

你试图循环 json.films 而不是 data.films ......

答案 3 :(得分:0)

{
    "films": [{  // <-- to access this data.films
        "label": "34",  // to access this data.films[0].label - this is the first object in the array
        "value": "34",  // to access this data.films[0].value
        "currently_streaming": "1", //  // to access this data.films[0].currently_streaming
        "full_streaming_url": "http://www.url.com", // and so on
        "url": "http://www.url.com"} // and so on
    {
        "label": "A Different Color", // to access this data.films[1].label - this is the second object in the array
        // arrays are zero indexed
        "value": "A Different Color", // to access this data.films[1].value
        "currently_streaming": "1",
        "full_streaming_url": "http://www.url.php",
        "url": "http://www.url.com"}]
}​

所以当你循环时 - 你想循环数组的位置..

$.each(data.films, function(k,v){
    console.log(v.value); // <-- this will give you the value for both
    // now that you're here you can get value for each property by 
    // v.label
    // v.value
    // v.currently_streaming
    // v.full_streaming_url
    // v.url
});

http://jsfiddle.net/KPkWe/