2009-08-04 19 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 - 呼び出し元関数への戻り値

EDIT:

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の制限を回避しながら、同期要求を行うにはサーバー上にプロキシが必要です。

ただし、jQueryのJSONPのサポートを使用して、何でもできます。 私たちは、コールバックをサポートするためにString.prototype.getLanguage()を記述する場合:

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); 
    }); 
} 

その後、我々は次のような機能を使用することができます。

'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); 
}; 
関連する問題