2013-06-10 4 views
1

У меня проблема с JSONP. Наконец, мне удалось загрузить данные JSONP в свой html-файл, но я не могу напечатать все данные. Я уже пробовал цикл for и $ .each, но не удалось.JSONP распечатать все данные

JSONP в PHP файле

<?php echo $_GET["callback"] ?> (
{ 
"expo":"pit", 
"datum":"05.06.2011 - 05.06.2016", 
"img":"images/pit_home.jpg", 
"link":"indexpit.html" 
}, 
{ 
"expo":"Space Odessy 2.0", 
"datum":"17.02 - 19.05.2013", 
"img":"images/so_home.jpg", 
"link":"indexso.html" 
} 
); 

Сценарий для вызова JSONP

<script type="text/javascript"> 
$.ajax({ 
type: 'GET', 
jsonpCallback: 'jsonCallback', 
contentType: 'application/json', 
dataType: 'jsonp', 
url: 'http://mllsdemode.be/Ex-cache/home.php', 
success: function(json) { 
      for (var key in json) { 
       var el = document.getElementById("home"); 
       el.innerHTML = "<li><a href=" + json.link + " data-ajax='false'><img src=" + json.img + "><div class='dsc'>" + json.expo + "<br><em>" + json.datum + "</em></div></a></li>"; 
      } 
     }, 
error: function() { alert("Error reading jsonP file"); } 
}); 
</script> 

Каждый знает, что я должен сделать, чтобы напечатать всю информацию? В этот момент я получаю данные только для ямы, а не для данных Space Odessy 2.0.

ответ

0
The JSONP should be: 

<?php echo $_GET["callback"] ?> (
    [ 
     { 
     "expo":"pit", 
     "datum":"05.06.2011 - 05.06.2016", 
     "img":"images/pit_home.jpg", 
     "link":"indexpit.html" 
     }, 
     { 
     "expo":"Space Odessy 2.0", 
     "datum":"17.02 - 19.05.2013", 
     "img":"images/so_home.jpg", 
     "link":"indexso.html" 
     } 
    ] 
); 

Вы отсутствовали в [] вокруг массива, так что вы проезжали два аргумента функции обратного вызова вместо одного массива.

После этого ваша петля ошибочна. Он обрабатывает один объект, а не массив, и заменяет внутренний HTML-код home каждый раз вместо добавления.

success: function(json) { 
    var $home = $("#home"); 
    $home.empty(); 
    $.each(json, function(i, el) { 
     $home.append("<li><a href=" + el.link + " data-ajax='false'><img src=" + el.img + "><div class='dsc'>" + el.expo + "<br><em>" + el.datum + "</em></div></a></li>"); 
    }); 
} 
+0

Я пробовал это, но он не печатает ни одну из данных. Очень странно! – user2471501

+0

См. Обновленный ответ. – Barmar

+0

Это работает! Большое спасибо, чувак! ^^ – user2471501

0
<?php echo $_GET["callback"] ?> ([ 
{ 
    "expo":"pit", 
    "datum":"05.06.2011 - 05.06.2016", 
    "img":"images/pit_home.jpg", 
    "link":"indexpit.html" 
}, 
{ 
    "expo":"Space Odessy 2.0", 
    "datum":"17.02 - 19.05.2013", 
    "img":"images/so_home.jpg", 
    "link":"indexso.html" 
}]); 

.

$(json).each(function (index, item) { 
    var el = document.getElementById("home"); 
    el.innerHTML += ("<li><a href=" + item.link + " data-ajax='false'><img src=" + item.img + "><div class='dsc'>" + item.expo + "<br><em>" + item.datum + "</em></div></a></li>"); 
}); 
+0

Я также пробовал это решение, но у меня также нет никаких результатов. Он не печатает никаких данных. – user2471501

0

Попробуйте это.

json = $.parseJSON(json); 

теперь вы можете цикл через него, как следующее:

for(i=0; i<json.length; i++) 
{ 
    alert(json[i].expo); 
} 

Ваш массив должен быть в этом формате [{}, {}];

Спасибо

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