2016-03-22 10 views
0

Bir tabloya koymaya çalıştığım bir API'dan json yanıtım var. Bu benim ne var:Bir tabloya json responce koymaya çalışıyor - tanımsız bir hata

http://jsfiddle.net/xnj1hwwj/2/

$(document).ready(function() { 
    var json = "http://api.geonames.org/findNearbyPlaceNameJSON?lat=51.4500&lng=-2.5833&username=demo&maxRows=2&radius=5"; 
    var tr; 
    for (var i = 0; i < json.length; i++) { 
    tr = $('<tr/>'); 
    tr.append("<td>" + json[i].name + "</td>"); 
    tr.append("<td>" + json[i].distance + "</td>"); 
    $('table').append(tr); 
    } 
}); 

tüm geri bildirimler bu yayınlanmasını nasıl üzerinde mutluluk duyacağız. Bunu önlemek için başka bir kütüphane kullanmamayı tercih ederim.

+2

'json' senin örneğin, bir json yanıt içinde (API büyük olasılıkla yapmak istiyorum çağrı içeren) bir' string' depoluyor. –

cevap

1

Eğer bazı bilgileri sahip olmasını json istiyorsanız Kodunuz şu şekilde görünecektir sınırlandırmak:

var url = "http://api.geonames.org/findNearbyPlaceNameJSON?lat=51.4500&lng=-2.5833&username=demo&maxRows=2&radius=5"; 
var xhr = new XMLHttpRequest(); 

xhr.onreadystatechange = function (e) { 
    if (this.readyState === 4 && this.status == 200) { 

     //turn the response into a json object 
     data = JSON.parse(xhr.responseText); 
     // do whatever you want now 


    } 
} 
xhr.open('GET', url, true); 
xhr.send(); 

Bunu nedeni https://developer.mozilla.org/en-US/docs/Security/Mixed_content

+0

jsifddle kullanarak http ve jquery'yi http üzerinden yükleyerek jsfiddle üzerinde çalışabilirim. Ancak kodunuzu çalışmaya alamıyorum. URL'yi bir json verisine dönüştürdüm ve daha sonra bu şekilde biçimlendirmeye çalıştım ama hiçbir şey geri gelmiyor. Bu benim anlayışımın biraz ötesinde: http://jsfiddle.net/spadez/f7cnnctf/3/ –

+0

Bu kemanı kontrol et http://jsfiddle.net/f7cnnctf/5/. Mesele, 'data' değişkeninin 'geonames' olarak adlandırılan tek bir tuşla' Object' olmasıdır. Ve bu anahtarın bir değer dizisi var. Bu yüzden bir data olan data.geonames 'i, data.geonames [i] .distance' ile 'name' ve 'distance' özelliklerine erişebilirsiniz. Jquery hakkında pek bir şey bilmiyorum ama console.log'u kontrol et – AshBringer

+0

http://jsfiddle.net/f7cnnctf/7/ – AshBringer

0

@Moishe Lipsker tarafından yorumlarda belirtildiği üzere, bir AJAX isteğiniz yok, yalnızca bir grup GET parametresi olan bir URL'niz yok. Gereksinim duyduğunuz JSON nesnesini döndürmek için gereken $.ajax() gibi jQuery AJAX yöntemlerinden birini okumalısınız.

http://api.jquery.com/jquery.ajax/

1
bir keman çalışması yapmak mümkün olmayacaktır

Bir yanıt almak için önce ajax araması yapın:

$.get('http://api.geonames.org/findNearbyPlaceNameJSON?lat=51.4500&lng=-2.5833&username=demo&maxRows=2&radius=5', function(json) { 
 
    renderResponse(json, $('#result'), 0); 
 
}); 
 
function renderResponse(obj, node, space) { 
 
    var keys = Object.keys(obj); 
 
    for(var i = 0; i < keys.length; i ++) { 
 
     var inside = obj[keys[i]] 
 
     , isWritable = ['string', 'number', 'boolean'].indexOf(typeof inside) != -1 
 
     , key = keys[i] 
 
     , indentation = Array(space + 1).join('&nbsp;') 
 
     ; 
 
     var prop = $('<div/>', {html: indentation + key + ':&nbsp' + (isWritable ? inside : '[') + '<br>'}).appendTo(node); 
 
     if(!isWritable) { 
 
      renderResponse(inside, prop, space + 8); 
 
      $('<div/>', {html: indentation + ']' + (i < keys.length - 1 ? ',' : '') + '<br>'}).appendTo(prop); 
 
     } 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div id="result"></div>

+0

Bunun için teşekkürler. Neden uğraştığımı bilmiyorum ama JSfiddle'a koyamıyorum: https://jsfiddle.net/spadez/f7cnnctf/1/ –

+1

Sorun Yok. Öğeyi incelerseniz, jsfiddle'ın gösterdiği hatayı görebilirsiniz: jquery.min.js: 5 Karma İçerik: 'https://jsfiddle.net/spadez/f7cnnctf/1/' adresindeki sayfa HTTPS üzerinden yüklendi ancak, güvenli olmayan bir XMLHttpRequest bitiş noktası olan 'http://api.geonames.org/findNearbyPlaceNameJSON?lat=51.4500&lng=-2.5833&username=demo&maxRows=2&radius=5' istedik. Bu istek engellendi; içerik HTTPS üzerinden sunulmalıdır. ' –

+0

Tamam Şimdi jsfiddle üzerinde şu şekilde çalışabilirim: http://jsfiddle.net/spadez/f7cnnctf/2/ - Ancak benim örneğimde bir tablo olarak gösteriliyor, ama sizinkine satır başına sadece bir tane. Nasıl bir tablo yapabilirim? –

İlgili konular