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

値を呼び出し元の値に戻すにはどうすればよいですか? ありがとう。

編集:私はこれを試しました:

    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 を返します。

4

2 に答える 2

6

String.prototype.getLanguage() 関数が JSON を返すだけになるように、同期イベントを使用することを想定しています。残念ながら、リモート API から jQuery を使用してそれを行うことはできません。

私の知る限り、jQuery は同期 XMLHttpRequest オブジェクトをサポートしていません。たとえサポートしていたとしても、同一生成元ポリシーの制限を回避しながら同期要求を行うには、サーバーにプロキシが必要です。

ただし、JSONP に対する jQuery のサポートを使用して、必要なことを行うことができます。コールバックをサポートするために 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);
});
于 2009-08-04T20:48:20.890 に答える
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);
};
于 2009-08-04T19:05:20.397 に答える