2016-03-22 5 views
0

Ich habe eine JSON Antwort von einer API, die ich versuche, in eine Tabelle zu legen. Das ist, was ich habe:Versuchen, JSON-Antwort in einer Tabelle zu setzen - undefined Fehler

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); 
    } 
}); 

Jedes Feedback zu schätzen würde, wie ich dieses Laufen zu bekommen. Ich würde lieber keine andere Bibliothek dafür verwenden, wenn ich es vermeiden kann.

+2

'json' speichert eine' string' (mit der API-Aufruf Sie wahrscheinlich machen wollen) in Ihrem Beispiel kein json Antwort. –

Antwort

1

Ihr Code shoud wie folgt aussehen, wenn Sie Ihre json wollen einige Daten haben:

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(); 

Sie werden nicht in der Lage sein, um es wegen https://developer.mozilla.org/en-US/docs/Security/Mixed_content

+0

Ich kann es auf jsfiddle arbeiten lassen, indem ich jsifddle als http benutze und jquery über http lade. Allerdings kann ich Ihren Code nicht zum Funktionieren bringen. Ich mache die URL zu einem JSON-Daten und versuchte dann, es so zu formatieren, aber es gibt nichts zurück. Dies ist ein wenig jenseits meines Verständnisses: http://jsfiddle.net/spadez/f7cnnctf/3/ –

+0

Überprüfen Sie diese Geige http://jsfiddle.net/f7cnnctf/5/. Die Variable 'data' ist ein' Objekt' mit einem einzigen Schlüssel namens 'geonames'. Und dieser Schlüssel hat ein Array von Objekten als Wert. Sie sollten also "data.geonames", das ein Array ist, durchlaufen und auf 'name' und' distance' Eigenschaften mit 'data.geonames [i] .distanz' zugreifen. Ich weiß nicht viel über jquery, aber überprüfen Sie die console.log – AshBringer

+0

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

0

Wie von @Moishe Lipsker in den Kommentaren angegeben, haben Sie keine AJAX-Anfrage, nur eine URL mit einer Reihe von GET-Parametern. Sie sollten eine der jQuery AJAX-Methoden lesen, z. B. $.ajax(), die erforderlich ist, um das JSON-Objekt zurückzugeben, das Sie benötigen.

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

1
in einer Geige funktioniert

Führen Sie zuerst einen Ajax-Anruf aus, um eine Antwort zu erhalten:

$.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

Vielen Dank dafür. Ich weiß nicht, warum ich kämpfe, aber ich kann es nicht in die JSfiddle setzen: https://jsfiddle.net/spadez/f7cnnctf/1/ –

+1

Kein Problem. Wenn Sie das Element inspizieren, können Sie den Fehler sehen, den jsfiddle zeigt: 'jquery.min.js: 5 Gemischter Inhalt: Die Seite unter 'https://jsfiddle.net/spadez/f7cnnctf/1/' wurde über HTTPS geladen , aber einen unsicheren XMLHttpRequest-Endpunkt angefordert "http://api.geonames.org/findNearbyPlaceNameJSON?lat=51.4500&lng=-2.5833&username=demo&maxRows=2&radius=5". Diese Anfrage wurde blockiert. der Inhalt muss über HTTPS bedient werden. –

+0

Ok Ich kann es auf jsfiddle jetzt so arbeiten lassen: http://jsfiddle.net/spadez/f7cnnctf/2/ - Wie auch immer, in meinem Beispiel wird es als eine Tabelle angezeigt, aber Ihre ist nur eine pro Zeile. Wie mache ich es zu einem Tisch? –

Verwandte Themen