2012-05-24 2 views
0

누구든지이 코드의 문제점을 볼 수 있습니까? 'out'이 반환되면 값은 ''입니다. 이유를 모르겠다. 아마 getJSON 함수에 대해 알고있을 것이다.getJSON의 문자열에 추가

나는이 함수에 URL을 전달하기 위해 노력하고있어, 그것은 URL을해서 getJSON을 수행하고, 텍스트 문자열에 (나는 또한 서식하고있어) 결과를 추가 할 수 있습니다. 내가 그들을 모두 한 텍스트 문자열에, 그래서 정규식으로 문자열을 구문 분석 할 수 있습니다. 어떤 도움을 주셔서 감사합니다, 감사합니다!

function getSearch(url) { 
var out = ''; // output variable 

$.getJSON(url, function(data) { 
    for(var i = 0; i < numResults; i++) { 
     out += '<p class="hash_list">' + '<a href="http://www.twitter.com/' + data.results[i].from_user + '">' + data.results[i].from_user + '</a>: ' + data.results[i].text + '</p>'; 
    } 
}); 

return out; 
} 
+0

방법 JSON의 모습입니다이야? – Shyju

+1

** async **의 멋진 세계에 오신 것을 환영합니다! 너는 그렇게 할 수 없다. – SLaks

+0

@ SLaks - 해결 방법에 관한 아이디어가 있습니까? – callmecavs

답변

2

아약스 비동기, 당신은 아약스 요청이 완료되기 전에 반환이 코드. 코드를 재구성 할 수있는 몇 가지 방법이 있습니다.

요청이 완료되면 실행되는 콜백 함수를 전달할 수 있습니다.

function getSearch(url, callback) { 
    $.getJSON(url, function(data) { 
    var out = '';  
    // btw what is numResults ?? 
    for(var i = 0; i < numResults; i++) { 
     out += '<p class="hash_list">' + '<a href="http://www.twitter.com/' + data.results[i].from_user + '">' + data.results[i].from_user + '</a>: ' + data.results[i].text + '</p>'; 
    } 
    if(typeof callback === 'function') callback(out); 
    }); 
} 

그러면 다음과 같은 기능을 사용하게됩니다.

getSearch('test.php', function(out){ 
    // here you can use the out variable 
}); 

또는 당신은 약속을 반환하고 연기 해결 인수의 일환으로 밖으로 변수를 전달하는 JQuery와 deferreds를 사용할 수 있습니다. 여기에 예를

function getSearch() 
{  
    var deferred = $.Deferred(); 
    $.getJSON(url, function(data) { 
    var out = '';  
    // btw what is numResults ?? 
    for(var i = 0; i < numResults; i++) { 
     out += '<p class="hash_list">' + '<a href="http://www.twitter.com/' + data.results[i].from_user + '">' + data.results[i].from_user + '</a>: ' + data.results[i].text + '</p>'; 
    } 
    deferred.resolve(out); // resolve the request and pass in the out argument. 
    }); 

    return deferred.promise(); // return a promise 
} 


$.when(getSearch()).then(function(out){ // the out variable will get passed in 
    console.log(out); 
}); 
+1

+1 '지연'에 대한 자바 스크립트를 시작 :-) –

2

AJAX는 비동기입니다.

당신은 콜백 함수를 사용하여 값을 반환해야, 같은 방법으로 getJSON가 수행합니다

function getSearch(url, callback) { 
    $.getJSON(..., function() { 
     ... 
     callback(...); 
    }); 
} 
+0

예제를 제공해 줄 수 있습니까? 또는 더 많은 것을 읽는 링크? 이 물건에 새로운 브랜드, 며칠 전 = X – callmecavs

1

$.getJSON 비동기입니다. 즉, AJAX 호출이 완료되기 전에 out이 반환됩니다.

당신이 AJAX 호출에서 아무것도 반환하지 수, 당신은 $.getJSON에 콜백에서 out 다루는 모든 코드를 추가해야합니다.

귀하의 기능에 콜백을 전달하는 것이 좋습니다. 이런 식으로 뭔가가 :

function getSearch(url, callback) { 
    var out = ''; 
    $.getJSON(url, function(data) { 
     for(var i = 0; i < numResults; i++) { 
      out += '<p class="hash_list">' + '<a href="http://www.twitter.com/' + data.results[i].from_user + '">' + data.results[i].from_user + '</a>: ' + data.results[i].text + '</p>'; 
     } 
     if(typeof callback === 'function'){ 
      callback(out); // call your callback with data 
     } 
    }); 
} 

자, 대신 getSearch에서 반환 값을 기대, 당신은 콜백 보냅니다.

getSearch('http://example.com/myurl', function(data){ 
    // this function will get called sometime in the future, 
    // once $.getJSON is done, "data" will be the "out" from the AJAX call 
});