2013-08-24 2 views
1

Я создал сайт в wordpress, и я использую wordpress json API для извлечения данных для веб-приложения, которое я разрабатываю. Json API работает нормально: http://danielvivancos.com/edu/wordpress/?json=1 Я получаю свой файл Json. Но теперь я пытаюсь распечатать его на моей странице html с помощью метода jquery getjson. Сначала я просто пытаюсь отобразить в div некоторую информацию из json-файла, чтобы проверить, что она работает, но я не знаю, почему это не так. Здесь вы можете проверить мой сценарий:Я не могу получить данные из файла JSON

$(document).ready(function(){ 
$("#btn382").click(function(){  

    $.ajaxSetup({ cache: false }); 

    $.getJSON("http://danielvivancos.com/edu/wordpress/?json=1&count=1", function(data){ 
     var html = []; 


     $.each(data.posts.author, function(index, author){   
      html.push("id : ", author.id, ", ", 
         "slug : ", author.slug, ", ", 
         "name : ", author.name, "<br>"); 
     }); 


     $("#div381").html(html.join('')).css("background-color", "orange"); 
    }).error(function(jqXHR, textStatus, errorThrown){ /* assign handler */ 
     /* alert(jqXHR.responseText) */ 
     alert("error occurred!"); 
    }); 
}); 
}); 

И, конечно, у меня есть # div381 создан. Я не знаю, что я делаю неправильно, но я действительно застрял. Любая помощь будет оценена!

EDIT: Ошибка консоли: не удается прочитать свойство «длина» неопределенного.

SOLVED: Я изменил кому для знака плюс и изменил способ итерации через файл, как описано ниже в одном из ответов.

+0

Является ли ваш скрипт на danielvivancos.com домена или использования домена CORS? если нет, то вам нужно использовать JSONP. – jcubic

+0

Используйте 'console.log (jqXHR);' вместо этого, конечно, с консолью JS. –

+2

a '{' является пропущенной функцией (данными)? –

ответ

0

Свойство posts в вашем файле JSON является array.

Так что вам нужно сначала пройти через этот массив, чтобы получить доступ к собственности author!

$.each(data.posts, function(i, post) { 
    var author = post.author; 
}); 
1

Кажется, тип posts представляет собой массив, и первый элемент представляет собой хэш, который содержит author.

Попробуйте переписать

$.each(data.posts[0].author, ... 

UPDATE

html.push("status : ", data.status, ", ", 
    "count : ", data.count, ", ", 
    "pages : ", data.pages, "<br>"); 
$.each(data.posts, function(index, post){ 
    html.push("id : ", post.author.id, ", ", 
    "slug : ", post.author.slug, ", ", 
    "name : ", post.author.name, "<br>"); 
}); 
+0

Я использовал то, что вы говорите, и ошибка консоли исчезает, но мои данные не отображаются. Я упростил свой код и написал: $ .each (data, function (index, post) { html.push ("status:", post.status, ",", "count:", post .count, ",", "pages:", post.pages, "
"), пожалуйста, зайдите на эту страницу http://danielvivancos.com/edu/directebre_app_jquerymobile/ и нажмите кнопку JSON. Я не могу понять почему он ничего не отображает ... спасибо в продвинутом состоянии! – ERed

+1

Я думаю, что вы запутались вообще. 'data' - это хэш.' each' на данных выполняет итерацию пар ключ-значение и производит (index = status, post = "ok"). , (index = count, post = 1) и т. д.Просто переместите свой блок в 'each' вне' each', чтобы распечатать значения. Чтобы получить доступ к ключу 'author', вы должны выполнить итерацию по каждому элементу массива data.post' и получить ключ' author' элемента. Я одобрил свой ответ. – phts

Смежные вопросы