jQuery getJSON - Rückgabewert an die CLIP-Funktion
-
22-07-2019 - |
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.
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);
};