我的问题是来自google finance api提供的json中的任何字符串。我在调试时得到“未定义”。 。在下面的例子中,我对符号(t)和当前价格(l)感兴趣。
$.getJSON("http://finance.google.com/finance/info?client=ig&q=TSLA&callback=?",
function(json) {
var Stocks = json;
var text ="";
text = Stocks.l + " is the current stock price for: " + Stocks.t;
document.getElementById('Textn').innerHTML = text;
});
答案 0 :(得分:0)
响应是一个对象数组:
[
{
"id": "12607212",
"t" : "TSLA",
"e" : "NASDAQ"
//etc
因此,要访问对象属性,首先需要钻入数组以获取所需的元素:
json[0].t //gets prop "t" of elem at index 0 of array, returns "TSLA"
答案 1 :(得分:0)
Stocks.l未定义,因为Stocks /你得到的回应是一个数组,而不是一个对象。
万一你收到一个包含多个对象的数组,我会使用一个循环 - 如果它是一个只有一个元素的数组,那么循环没有坏处。下面使用es6对象解构,因此请注意它目前在每个浏览器中都不起作用:
$.getJSON("https://finance.google.com/finance/info?client=ig&q=TSLA&callback=?", json => {
for (let {l, t} of json) {
let text = l + " is the current stock price for: " + t;
document.getElementById('Textn').innerHTML += text;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><div id="Textn">
</div>
es5变体会像
一样
$.getJSON("https://finance.google.com/finance/info?client=ig&q=TSLA&callback=?", function(json) {
json.forEach(function(v) {
var text = v.l + " is the current stock price for: " + v.t;
document.getElementById('Textn').innerHTML += text;
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="Textn">
</div>