2014-01-09 4 views
0

응답에서 전역 변수를 업데이트하려고합니다. 나는 내 범위가 어떻게 든 어지럽 힌다는 것을 알고 있으며 예제를 찾으려고 시도했지만 이것을 찾지 못했습니다. 나는 모든 신텍스 팁이 도움이 될 수 있도록 자바 스크립트에 익숙하지 않다. 어떤 도움이라도 좋을 것입니다!함수에서 변수가 전역으로 업데이트되지 않습니다.

hit_count: function(permalink) { 

    var count = 0, 
    perm = permalink, 
    url; 

    if(perm) { 
     url = 'http://www.mysite.com?q=scope:' + perm + '&callback=?'; 

     $.getJSON(url, function(result){ 
      count = result.count; 
      //want this to update global count or at least return this count 
      if(count > 1) { 
       count = count - 1; 
      } 

     }); 
    } 

    return count; 
} 
+0

이것이 작동하지 않습니까? – Cilan

+5

'$ .getJSON'은 비동기 적으로 작동하지 않습니다. 'return count'를 할 때,'$ .getJSON'은 아직 수행되지 않을 수도 있습니다. 이 기능을 사용하는 방법을 보여줄 수 있습니까? – putvande

+0

@putvande 말 그대로 함수를 count = parseInt (trend_count (params.permalink), 5); – atsituab

답변

1

문제는 $.getJSON비동기 것입니다. json으로 요청이 완료되기 전에이 코드에서,

$.getJSON(url, function(result){ 
    //... 
    count = count - 1; 
}); 
return count; 

return count;이 실행됩니다. 즉 count이 반환 된 후에는 count = count - 1 줄이 오래 실행됩니다.

이 문제를 처리하는 일반적인 방법은 요청이 완료 될 때 실행할 콜백 함수를 전달하는 것입니다. 당신의 예에서는 이것을 할 수 있습니다. 당신은 다음과 같이 호출 할 수 있습니다

hit_count: function(permalink, callback) { 
    //... 
    $.getJSON(url, function(result){ 
    //... 
    count = count - 1; 
    callback(count); 
    }); 
} 

: Ajax 요청이 완료되고 getJSON 뒤에 숨겨진 핸들러가 실제로 핸들러 호출하기 전에

hit_count(permalink, function(count) { 
    // code to execute once the request is complete 
}); 
+0

그래서 어떻게 해결할 수 있습니까? – atsituab

+0

@atsituab 편집보기 –

+0

선생님, 끝내 주셔서 감사합니다 :) – atsituab

0

문제는, 당신은 카운트 업데이트 된 값을 얻을 수 없습니다.

편지받는 사람이 편지함에 떨어 뜨린 즉시 읽는 것으로 가정합니다.

당신은 다른 두 가지를 카운트 할 수 있습니다 :

1) 문자의 수를 읽을 사람에서) 승인의 수를
2를 보냈다.

글자가 이동하는 시간이 필요하고 (브라우저에서 서버로 앞뒤로 이동하는 요청) 문자가 손실 될 수도 있으므로 (Ajax 요청이 실패 할 수 있음) 두 카운트가 항상 같다고 가정 할 수 없습니다 .

여기서 핸들러 코드는 안전하게 도착한 문자를 계산하려고 시도하지만 hit_count은 보낸 문자 수와 동일한 카운터를 처리합니다.

이것은 눈물로 끝날 수 있습니다.

관련 문제