2012-11-21 3 views
0

.js 파일에서이 함수를 선언하고 .html 파일에서 호출했습니다.JavaScript : 경고없이 값을 할당 할 수 없습니다.

function getTotalPages() { 
    var valuePage; 
    $.getJSON('Data/product.json'). 
     done(function(data) { 
     $.each(data, function(key, value) { 
       valuePage=value; 
      }); 
     }); 
    //alert('out'); 
    return valuePage; 
} 

위의 기능은 경고와 함께 좋은 작업을하고있다 "경고"하지 않고 "정의"를 반환합니다. 어느 누구도이 일에 나를 도울 수 있습니까?

감사합니다. 사전에.

답변

4

이 문제는 1000 번 답변되었습니다. 그것은 '비동기 요청으로부터 어떤 값을 반환 할 수있는 방법이 없습니다'에 관한 것입니다. valuePage으로하려는 모든 작업은 done 콜백 내부에서 수행해야합니다.

+0

감사합니다. 이제 콜백과 함께 다른 변수에 값을 할당하는 방법이 있습니까? – vinaykumar

+0

원하는 변수에 값을 할당 할 수 있습니다 ... 왜, 문제가 어디입니까? – devnull69

+0

callback에서 변수를 할당하려고하지만 콜백 함수에서 값을 가져올 수 없습니다. 그것은 "정의되지 않은"것을 보여주고 있습니다. – vinaykumar

1

AJAX는 경고 메시지를 닫을 때까지 반환 값이 해결되지만 경고 없이는 너무 빠를 수 있습니다. 동기식 요청을하거나 콜백을 사용할 수 있습니다.

2

아약스 요청이 비동기이므로 작동하지 않습니다. 경고가 발생하면 시간 초과 값이 반환 된 후 값이 반환됩니다. async: false을 추가하여 스크립트를 만들 수 있습니다 (jsonp을 사용하는 도메인 간 요청에 대해서는 동기화 요청을 할 수 없습니다).하지만 요청이 준비 될 때까지 JS가 차단되므로 실제로는 권장하지 않습니다. 나는에 기능을 전달 http://jsfiddle.net/vWnHJ/

예에서 :

function getResult(callback) { 
    var url = 'https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=mgechev&count=3'; 
    $.ajax({ 
     url: url, 
     success: function (data) { 
      if (typeof callback === 'function') { 
       callback(data); 
      } 
     }, 
     dataType: 'jsonp' 
    }); 
} 

getResult(function (data) { 
    var variable = data; 
    alert(variable); 
});​ 

JSFiddle : 여기

function getTotalPages(callback) { 
    var valuePage; 
    $.getJSON('Data/product.json'). 
     done(function(data) { 
      $.each(data, function(key, value) { 
      if (typeof callback === 'function') { 
       callback(value); 
      } 
     }); 
    }); 
} 

당신이 사용하는 비동기 요청을 할 수있는 방법을 예입니다 : 더 나은 방법은 콜백을 사용하는 것입니다 getResult 함수를 호출하고 요청에서받은 데이터로 주어진 함수를 호출하십시오.

관련 문제