Javascript 在不知情的情况下访问对象属性';具有for in循环的父对象

Javascript 在不知情的情况下访问对象属性';具有for in循环的父对象,javascript,ajax,Javascript,Ajax,我正在尝试访问从外部API检索的值。具体来说,它是一个缩短的URL。缩短器将长URL保存为对象中的对象本身,并将缩短的URL放置在此对象中(请参见屏幕截图) 我不知道长URL的确切值,所以我尝试使用for-in循环来访问短URL(因为我知道如果它是键,那么它总是名称),现在将它打印到控制台 我得到了undefined、[object,object]或null的变体 这里少了什么 longUrl=“longUrl=”+longUrl; $.ajax({ 键入:“get”, 数据类型:“jsonp

我正在尝试访问从外部API检索的值。具体来说,它是一个缩短的URL。缩短器将长URL保存为对象中的对象本身,并将缩短的URL放置在此对象中(请参见屏幕截图)

我不知道长URL的确切值,所以我尝试使用for-in循环来访问短URL(因为我知道如果它是键,那么它总是名称),现在将它打印到控制台

我得到了undefined、[object,object]或null的变体

这里少了什么

longUrl=“longUrl=”+longUrl;
$.ajax({
键入:“get”,
数据类型:“jsonp”,
网址:'http://api.shortswitch.com/shorten?apiKey=3f5f69733156cce575b9a7ab1783ff4f4f0a8b5c&format=json&',
跨域:是的,
数据:longUrl,
成功:功能(数据){
for(数据中的var shortUrl){
if(data.hasOwnProperty(shortUrl)){
log(数据[shortUrl]);
}
}
}
});

请尝试使用
数据。结果
而不是
数据

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({
键入:“GET”,
数据类型:“jsonp”,
网址:'http://api.shortswitch.com/shorten?apiKey=3f5f69733156cce575b9a7ab1783ff4f4f0a8b5c&format=json&',
跨域:是的,
数据:longUrl,
成功:功能(数据){
var shorturl=[];
for(数据中的var键。结果){
shortUrl.push(data.results[key].shortUrl);
}
console.log(短URL);
}
});

请尝试使用
数据。结果
而不是
数据

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({
键入:“GET”,
数据类型:“jsonp”,
网址:'http://api.shortswitch.com/shorten?apiKey=3f5f69733156cce575b9a7ab1783ff4f4f0a8b5c&format=json&',
跨域:是的,
数据:longUrl,
成功:功能(数据){
var shorturl=[];
for(数据中的var键。结果){
shortUrl.push(data.results[key].shortUrl);
}
console.log(短URL);
}
});

通过迭代对象的属性并访问该键,您似乎在正确的轨道上。根据示例数据,您应该检查
数据。结果
而不是
数据

下面是一个例子:

以下是相关代码:

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键。您实际上只是在遍历对象的索引

通过迭代对象的属性并访问该键,您似乎走在了正确的轨道上。根据示例数据,您应该检查
数据。结果
而不是
数据

下面是一个例子:

以下是相关代码:

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键。您实际上只是在遍历对象的索引

您错过了$.ajax的结束括号method@AnkitAgarwal,很抱歉,它们位于一些已注释掉的行下方。我会在上面编辑。你的代码不会打印“未定义”或“空”。它打印属性-“”,OK,0,{results}您错过了$.ajax的右括号method@AnkitAgarwal,很抱歉,它们位于一些已注释掉的行下方。我会在上面编辑。你的代码不会打印“未定义”或“空”。它打印属性-“”,OK,0,{results}也许您可以更新您的答案,解释OP需要查看
数据。results
而不是
数据
?(让他们从你的代码中找出答案就没那么有用了。)这并不能回答OPs的问题。很明显,OP说过“我得到了未定义、[对象,对象]或null的变体”。所以,它不能尝试迭代错误的属性。噢!他能很容易地看出差别!不过,我会的@查理-OP肯定是试图迭代错误的属性。他们想要的值在
数据中。结果
,而不是
数据
@CharlieH为什么要问一些明确而明显的问题!我已经测试了代码,它产生了预期的结果。这就是重点!作者所尝试的是巨大的,他分享它只是为了强调他的努力,而不是寻求任何解释!甚至OP的问题都是这里缺少什么?这不是我得到这些变化的原因!也许您可以更新您的答案,解释OP需要查看
数据。结果
,而不是
数据
?(让他们从你的代码中找出答案就没那么有用了。)这并不能回答OPs的问题。很明显,OP说过“我得到了未定义、[对象,对象]或null的变体”。所以,它不能尝试迭代错误的属性。噢!他能很容易地看出差别!不过,我会的@查理-OP肯定是试图迭代错误的属性。他们想要的值在
数据中。结果
,而不是
数据
@CharlieH为什么要问一些明确而明显的问题!我已经测试了代码,它产生了预期的结果。这就是重点!作者所尝试的是巨大的,他分享它只是为了强调他的努力,而不是寻求任何解释!甚至OP的问题都是这里缺少什么?这不是我得到这些变化的原因!这并不能回答老年退休金计划的问题。很明显,OP说过“我得到了u的变化