2009-08-04 5 views
5
String.prototype.getLanguage = function() { 
     $.getJSON('http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=' + this + '&callback=?', 
      function(json) { 
       return json.responseData.language; 
      }); 
    }; 

값을 호출자 값으로 반환하려면 어떻게해야합니까? 감사합니다. .jQuery getJSON - 호출자 함수의 반환 값

편집 :

String.prototype.getLanguage = function() { 
     var returnValue = null; 

     $.getJSON('http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=' + this + '&callback=?', 
      function(json) { 
       returnValue = json.responseData.language; 
      }); 

     return returnValue; 
    }; 

그러나 어느 작동하지 않습니다 : 나는이 시도했습니다. null를 돌려줍니다.

답변

6

동기 이벤트를 사용하여 String.prototype.getLanguage() 함수가 JSON을 반환한다고 가정합니다. 불행히도 당신은 원격 API에서 jQuery로 그렇게 할 수 없다.

jQuery가 synchronous XMLHttpRequest objects을 지원하지 않는다고 알고있는 한, same-origin policy의 제한을 피하면서 동기화 요청을하기 위해 서버에 프록시가 있어야합니다.

그러나 JSONP에 대한 jQuery의 지원을 사용하여 원하는대로 할 수 있습니다.

String.prototype.getLanguage = function(callback) { 
    var thisObj = this; 
    var url = 'http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=' + this + '&callback=?'; 

    $.getJSON(url,function(json) { 
       callback.call(thisObj,json.responseData.language); 
    }); 
} 

그런 다음 우리가 같은 기능을 사용할 수 있습니다 : 우리가 콜백 지원하기 위해 String.prototype.getLanguage()를 작성하는 경우 는

'this is my string'.getLanguage(function(language) { 
    //Do what you want with the result here, but keep in mind that it is async! 
    alert(this); 
    alert(language); 
}); 
+0

감사합니다, 그건 좋은 생각입니다. –

1
var test = function(fun) 
{ 

String.prototype.getLanguage = function() { 
     .getJSON('http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=' + this + '&callback=?', 
      function(json) { 
       fun.call(json.responseData.language); 
      }); 
    }; 

}; 

test(retCall); 

var retCall = function(xjson){ 
    alert(xjson); 
};