2016-12-09 188 views
1

通过Ajax我得到一个JSON对象循环,我想看看,虽然所有这些项目。这里是我的ajax如何通过JSON对象

 document.getElementById('ACOptions').innerHTML = ""; 
    $.ajax({url: "SearchAvailableAircraft.php?ID=<?php echo $SimID; ?>&Code=<?php echo $SimCode; ?>&Search=" + S, success: function(result){ 
       /*alert(result);*/ 
       var MyAircraftList = result.AircraftList; 

而下面是我的回答

{"status":200,"status_message":"Valid Account","AircraftList":[{"ID":"1","FullTXT":"Boeing 777-200ER","TypeCode":"772","Manufacturer":"Boeing","Model":"777","Variant":"200ER","PaxCnt":"305","RangeNM":"5240","MinRwFT":"8000","Cost":"261500000","DeliveryDelay":"18"},{"ID":"2","FullTXT":"Airbus A320-200","TypeCode":"320","Manufacturer":"Airbus","Model":"A320","Variant":"200","PaxCnt":"186","RangeNM":"3300","MinRwFT":"2100","Cost":"98000000","DeliveryDelay":"9"}]}

我怎样才能循环尽管这些知道我的目标是result.AircraftList

+0

不是因为我有一个数组数组。 – Jason

+0

好,所以内部循环将从该答案。外循环将从这个答案:[在JavaScript中通过数组循环](http://stackoverflow.com/questions/3010840/loop-through-an-array-in-javascript) – styfle

+0

循环和做什么? –

回答

0

可以使用.forEach阵列上迭代,然后用for in循环插件在性能迭代ide前面的循环。

var data = {"status":200,"status_message":"Valid Account","AircraftList":[{"ID":"1","FullTXT":"Boeing 777-200ER","TypeCode":"772","Manufacturer":"Boeing","Model":"777","Variant":"200ER","PaxCnt":"305","RangeNM":"5240","MinRwFT":"8000","Cost":"261500000","DeliveryDelay":"18"},{"ID":"2","FullTXT":"Airbus A320-200","TypeCode":"320","Manufacturer":"Airbus","Model":"A320","Variant":"200","PaxCnt":"186","RangeNM":"3300","MinRwFT":"2100","Cost":"98000000","DeliveryDelay":"9"}]} 
 

 
var MyAircraftList = data.AircraftList; 
 

 
MyAircraftList.forEach(function(aircraft, i) { 
 
    for (var key in aircraft) { 
 
    console.log(i, key, aircraft[key]); 
 
    } 
 
});

+0

我的代码出现以下错误 - 未捕获的TypeError:无法读取未定义的属性'forEach'(...) – Jason

+0

这意味着您调用'.forEach'的变量未定义,而不是预期的数组变量。 – styfle

+0

我该如何解决这个问题? – Jason

0

我会用一个简单的递归函数通过对象进行迭代。它可以通过嵌套对象进行迭代。

// Your response 
var response = { 
    "status": 200, 
    "status_message": "Valid Account", 
    "AircraftList": [{ 
      "ID": "1", 
      "FullTXT": "Boeing 777-200ER", 
      "TypeCode": "772", 
      "Manufacturer": "Boeing", 
      "Model": "777", 
      "Variant": "200ER", 
      "PaxCnt": "305", 
      "RangeNM": "5240", 
      "MinRwFT": "8000", 
      "Cost": "261500000", 
      "DeliveryDelay": "18" 
     }, { 
      "ID": "2", 
      "FullTXT": "Airbus A320-200", 
      "TypeCode": "320", 
      "Manufacturer": "Airbus", 
      "Model": "A320", 
      "Variant": "200", 
      "PaxCnt": "186", 
      "RangeNM": "3300", 
      "MinRwFT": "2100", 
      "Cost": "98000000", 
      "DeliveryDelay": "9" 
     }] 
}; 

定义某处此功能:

function iterateRecursively(object, callbackFunction) { 

    // Walk through object 
    for (var keyName in object) { 

     // If the given parameter is an object, call the function over and 
     // over again, till you get a string or number 
     if (typeof object[keyName] === 'object') { 

      iterateRecursively(object[keyName], callbackFunction); 

     } else { 

      // Callback function to do something with results outside of main function 
      if (typeof callbackFunction === 'function') { 
       callbackFunction(keyName, object[keyName]); 
      } 

     } 
    } 
} 

所以,现在你可以通过子元素走路用:

iterateRecursively(response.AircraftList, function (key, value) { 

    // You could use "status" as condition. For example if you get some other status 
    // than "200", you could do something else (may be an error message). 
    // For example: 
    // if(key == 'status' && value != 200) doSomething(); 

    console.log(key + " = " + value); 
}); 

您也可以通过完整的 “响应” 对象到功能。它会有同样的效果。此外,您还可以访问其他元素,例如“status_message”等。

+0

这不起作用?为什么?我没有得到一个有效的数组或对象? – Jason

+0

奇怪。你会得到什么错误信息?什么不正确?我稍微修改了一下函数,以便通过回调函数轻松访问函数以外的功能。参见工作示例: https://jsfiddle.net/Lqs3o2ry/ – Hitmacher