2012-07-29 6 views
0

나는 여기 저기 난처한있어 내가 뭘 만들고있어 알아 싶어요.왜 내 개체의 속성을 볼 수 없습니다

일부 코드를 다시 작성하고 정리하는 중이 었습니다. 나는 아약스 호출을하고 json 문자열을 반환하는 메서드가 있습니다. 이 메소드를 두 곳의 장소에서 사용 했으므로 이름 공간 내에서이 메소드로 추상화했습니다.

이 인 JSON 목적이 추상화 된 방법

{"charge_ID":"4","price":"37","description":"corporate rate"} 

반환.

wwdb.getChargeRate = function(chargeID){ 
    var rate = {}, prop;  
    $.post(baseUrl + 'dashboard_job/jx_get_charge_rate', 
    { 
     'charge_ID': chargeID 
    },  
    function(data){   
     for(prop in data) { 
      rate[prop] = data[prop];    
     }  
    }, 
    'json' 
    ); 
    return rate; 
}; 

는 난 그냥 속도로 데이터를 할당 할 수있을 것이라고 생각하지만 일하러 통해 반복했다. 사실 나는 $ .post() 메서드의 function() 부분에서 return 데이터를 직접받을 수 있다고 생각했지만 작동하지 않았습니다. 그래서 질문 1은 왜 단순히 데이터를 반환 할 수없는 것입니까?

하지만 훨씬 더 기본적이고 실망스러운 점은 아래 코드에서 객체 속성에 액세스 할 수 없다는 점입니다. 질문 2. 이유는 무엇입니까?

$('#charge_rate_slt').change(function(){ 

    var t = $(this), v = $(t).val(), rate; 

    console.log(wwdb.getChargeRate(v)); //returns object ok 

    rate = wwdb.getChargeRate(v); //assigns object ok 

    console.log(rate); //displays in firebug as object with properties 

    console.log(rate.price) //undefined 

    for(p in rate) 
     console.log(p); //undefined? 
}); 
+2

아약스의 비동기 특성에 대해 들어 봤습니까? – Musa

+0

중복 가능한 [xmlhttp.responseText를 반환 할 수 없습니다?] (http://stackoverflow.com/questions/10369839/cant-return-xmlhttp-responsetext) – DCoder

답변

1

이 기능은 비동기 적입니다. 기능을보고있을 때 함수가 호출되지 않았 음을 기억하십시오. 함수가 rate를 반환하면 호출이 완료되지 않았습니다. 비율 변수를 나중에 보면 데이터가 있습니다. 코드의 두 번째 부분을 보지 않았지만 비슷한 문제가 발생할 것으로 예상됩니다.

wwdb.getChargeRate = function(chargeID){ 
    var rate = {}, prop;  
    $.post(baseUrl + 'dashboard_job/jx_get_charge_rate', 
    { 
     'charge_ID': chargeID 
    },  
    function(data){   
     for(prop in data) { 
      rate[prop] = data[prop];    
     }  
    }, 
    'json' 
    ); 
    return { "price" : "I am not undefined" }; 
}; 

는 이제 호출하는 함수 인쇄 뭔가를해야합니다 :

이 문제는 다음과 같은 변경 사항을 이해합니다.

+0

나는 그것이 맞는 것 같지 않습니다. 내가 출력 할 수있는 객체 게시 아약스 아무 문제, 난 그냥 속성에 액세스 할 수 없습니다. – SaminOz

+0

예, ajax 호출을 게시합니다. 그러나 'return rate;'행은 ajax 호출 전에 발생합니다. 이것이 바로 내 요점입니다. – Hogan

+0

@SaminOz 객체가 라이브이므로 코드가 실행될 때 객체가 비어 있지만 콘솔에서 체크하면 Ajax 요청이 완료되고 속성이 채워져서 실제로 작동하지 않는 것처럼 보입니다. – Musa

관련 문제