我正在尝试访问从外部API检索的值。具体来说,它是一个缩短的URL。缩短器使用长URL将其作为对象本身保存在对象中,并将缩短的URL放在此对象中(参见屏幕截图)。
我不知道长URL的确切值,所以我尝试使用for循环来访问shortUrl(因为我知道它总是名称,如果它是键),现在打印到控制台。
我得到undefined,[object,object]或null的变体。
这里缺少什么?
longUrl = "longUrl=" + longUrl;
$.ajax({
type: 'get',
dataType: 'jsonp',
url:'http://api.shortswitch.com/shorten?apiKey=3f5f69733156cce575b9a7ab1783ff4f4f0a8b5c&format=json&',
crossDomain: true,
data: longUrl,
success: function(data){
for (var shortUrl in data){
if(data.hasOwnProperty(shortUrl)) {
console.log(data[shortUrl]);
}
}
}
});
答案 0 :(得分:2)
请尝试使用data.results
代替data
:
var shortURLs = [];
for(var key in data.results) {
shortURLs.push(data.results[key].shortUrl);
}
console.log(shortURLs);
<强>演示:强>
var longUrl = {longUrl: "http://stackoverflow.com/questions/38417777/accessing-an-object-property-without-knowing-its-parent-with-a-for-in-loop/38417810#38417810"};
$.ajax({
type: 'GET',
dataType: 'jsonp',
url:'http://api.shortswitch.com/shorten?apiKey=3f5f69733156cce575b9a7ab1783ff4f4f0a8b5c&format=json&',
crossDomain: true,
data: longUrl,
success: function(data){
var shortURLs = [];
for(var key in data.results) {
shortURLs.push(data.results[key].shortUrl);
}
console.log(shortURLs);
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
答案 1 :(得分:1)
您似乎走在正确的轨道上,遍历对象的属性并访问该密钥。根据您的示例数据,您应该检查data.result
而不是data
。
以下是一个示例plunkr:https://plnkr.co/edit/7De7ZVPHz7x2n1OcKXmi?p=info
以下是相关代码:
var data = {
errorMessage: "",
statusCode: "OK",
errorCode: "0",
results: {
"http://hello?cmp=EXP:da:paid::320x50": {
hash: "B3uXHF",
shortUrl: "http://at.law.com/B3uXHf",
longUrl: "http://hello?cmp=EXP:da:paid::320x50"
}
}
};
function getShortURL(data) {
for (var property in data.results) {
if (data.results.hasOwnProperty(property)) {
return data.results[property].shortUrl;
}
}
}
console.log(getShortURL(data));
由于您不知道longUrl,因此您只需访问该对象的子属性即可访问shortUrl键。你真的只是遍历对象的索引。