Frage

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

Wie kann ich den Wert an den Aufrufer Wert zurückgeben? Danke.

EDIT: Ich habe das versucht:

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

Aber es ist auch nicht arbeiten. Es gibt null zurück.

War es hilfreich?

Lösung

Ich gehe davon aus Sie ein synchronen Ereignisse verwenden mögen, so dass Ihre String.prototype.getLanguage () Funktion wird nur die JSON zurück. Leider kann man das nicht von einem Remote-API mit jQuery tun.

Soweit ich weiß, jQuery nicht unterstützt synchronen XMLHttpRequest Objekte und selbst wenn es so wäre, dann würden Sie einen Proxy auf dem Server haben müssen, um die Synchronisationsanforderung zu machen, während die Einschränkungen des Same Origin Policy .

Sie können jedoch tun, was Sie für JSONP jQuery unterstützen wollen verwenden. Wenn wir nur String.prototype.getLanguage () schreiben einen Rückruf zu unterstützen:

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

Dann können wir die Funktion als solche verwendet werden:

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

Andere Tipps

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);
};
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top