2013-07-17 3 views
-1

저는 웹 서버에서 $ .getJSON으로 json 응답을 받고 있습니다. 이 응답입니다 :json 응답을 자바 스크립트 배열로 변환합니다.

[{"id":"1","latitude":"28.63","longitude":"77.21","price":"0"},{"id":"2","latitude":"28.71","longitude":"77.19","price":"100"}] 

그리고 이것은 배열이 응답 변환하는 내 자바 스크립트 코드 :

var i = 0; 
var vehicleId = $('#selectVehicle option:selected').val(); 
$.getJSON('getFillingDetails.php', {id : vehicleId}, function(data){ 
    var lat = []; 
    var lon = []; 
    var price = []; 
    $.each(data, function(key, value){ 
     lat.push(value.latitude); 
     lon.push(value.longitude); 
     price.push(value.price); 
     i++; 
    }); 
}); 
console.log(i); 

을하지만 콘솔에서 i 값을 볼 때 변경을하지 않습니다. 아직 0입니다. $.each() 안에 아무 것도 일어나지 않았 음을 의미합니다. 나는 완전히 자바 스크립트에 새로운 사람이다. 어떤 도움을 주시면 감사하겠습니다.

+0

같은 하나의 기름 부음은 '그것은 바이올린 http://jsfiddle.net/tBUnz/ –

+0

귀하의 코드가 잘 작동하는 비동기 요청이기 때문에 .getJSON'. –

+2

@ArunPJohny 자신의 코드는'$의 콜백 내부에서 –

답변

1

이 밖으로 시도 :

var i = 0; 
var vehicleId = $('#selectVehicle option:selected').val(); 
$.getJSON('getFillingDetails.php', {id : vehicleId}, function(data){ 
    var lat = []; 
    var lon = []; 
    var price = []; 
    $.each(data, function (i, item) { 
     $.each(item, function(key, value){ 
      lat.push(value.latitude); 
      lon.push(value.longitude); 
      price.push(value.price); 
      i++; 
     }); 
    }); 
    console.log(i); 
}); 

귀하의 주요 문제였습니다 AJAX는 J (avascript) A (차) X (ML), 통지 asynchronous, 당신이 CONSOLE.LOG (I) A (동기식) 때문에 요청이 끝나기 전에 해고 당하고있었습니다. 내가 알아 차린 또 다른 문제는 객체를 반복하는 것 뿐이라는 것입니다. JSON은 배열로 시작하지만 루프가 있어야합니다.

그냥 제안. 네이티브 루프는 매우 쉽고 빠르게 작동합니다. $.each를 사용하지 않는 I 제안 :

var i = 0; 
var vehicleId = $('#selectVehicle option:selected').val(); 
$.getJSON('getFillingDetails.php', {id : vehicleId}, function(data){ 
    var lat = []; 
    var lon = []; 
    var price = []; 
    for (var i = 0, item = data[i]; i < data.length; i++) { 
     for (var key in item) { 
      var value = key[item]; 
      lat.push(value.latitude); 
      lon.push(value.longitude); 
      price.push(value.price); 
      i++; 
     }; 
    }; 
    console.log(i); 
}); 

지금, 내가 jQuery를 당신의 작업을 쉽게하기 위해 만들어 졌다고 알고 있습니다. 하지만 개발자가 게으르 게 만드는 것만 같아요. 나는 jQuery가 훌륭하다고 생각한다.

+0

무슨 말씀 이세요? – Shawn31313

+0

오, 내 잘못이야. 그러나 '-1'은 필요하지 않았다. – Shawn31313

+0

-1은 내가 너 또는 개인적인 것을 좋아하지 않는다고 나타내지 않습니다. 그것이하는 모든 일은 내가 당신의 대답에 잘못된 것을 발견하고 당신이 그것을 바로 잡기를 원한다는 것을 나타냅니다. 원래 버전에서는 OP의 코드와 비슷했기 때문에 로그를 콜백 내부로 옮겼으니 의미가 있습니다. –

-1

그냥 인덱스 사용 : 나는 기본 루프 쉽게 다 것을 깨달았다하지만 일단 내가 $.each 사용을 중단 한

var data = [{"id":"1","latitude":"28.63","longitude":"77.21","price":"0"}, 
      {"id":"2","latitude":"28.71","longitude":"77.19","price":"100"}, 
      {"id":"2","latitude":"28.71","longitude":"77.19","price":"100"}]; 
var i; 
var lat = []; 
var lon = []; 
var price = []; 

$.each(data, function(index, value){ 
    lat.push(value.latitude); 
    lon.push(value.longitude); 
    price.push(value.price); 
    i = index; 
}); 

console.log(i); 

체크 아웃이 바이올린, 나는 당신이 원하는 일을해야한다고 생각을

http://jsfiddle.net/vmy3b/3/

0

이 코드를 시도

var i = 0; 
var vehicleId = $('#selectVehicle option:selected').val(); 
var jsonData; 
$.getJSON('getFillingDetails.php', {id : vehicleId}, function(data){ 

    jsonData = data; 
}); 
var lat = []; 
    var lon = []; 
    var price = []; 
$.each(jsonData, function(key, value){ 
     lat.push(value.latitude); 
     lon.push(value.longitude); 
     price.push(value.price); 
     i++; 
    }); 
console.log(i); 
+0

그는 매 반복마다 값이 아닌 'i'의 마지막 값을 기록하려고했습니다. –

+0

안녕하세요, "콘솔의 값은 변하지 않습니다. 여전히 0입니다. $ .each() 안에 아무 것도 일어나지 않는다는 것을 의미합니다"위의 수정은 i 값을 변경하는 것을 보여줍니다. – iJade

+0

그의 코드를주의 깊게 읽으십시오. 그의 console.log는 getJSON의 outside_outside이다. 지연된 실행은 AJAX가 돌아 오기 전에 증가하지 못하게한다. –

0

여기에, 때로는 혼란 스러울 수 있습니다 자바 스크립트 비동기 기능을 사용하여이 왜

: 이제

var result = 'pending'; 
$.ajax({ 
    url: 'something.php', 
    success: function() { 
    result = 'success'; 
    } 
}); 

우리가 여기에 결과를 사용하려는 경우 우리는 좋은 결과를 얻을 수 없겠죠

console.log(result); // 'pending'

그래서 나는 당신이 'f 이

var makeArray = function(data) { 
    var i = 0, 
     vehicleId = $('#selectVehicle option:selected').val(), 
     lat = [], lon = [], price = []; 

    $.each(data, function(key, value){ 
     lat.push(value.latitude); 
     lon.push(value.longitude); 
     price.push(value.price); 
     i++; 
    }); 
    console.log(i); 
}; 

$.getJSON('getFillingDetails.php', {id : vehicleId}, function(data){ 
    makeArray(data); 
}); 
관련 문제