jQuery getJSON — возвращаемое значение вызывающей функции

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

Как я могу вернуть значение вызывающей стороне? Спасибо.

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

Но это тоже не работает. Он возвращает ноль.


person Alon Gubkin    schedule 04.08.2009    source источник


Ответы (1)


Я предполагаю, что вы хотите использовать синхронное событие, чтобы ваша функция String.prototype.getLanguage() просто возвращала JSON. К сожалению, вы не можете сделать это с помощью jQuery из удаленного API.

Насколько мне известно, 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);
});
person coderjoe    schedule 04.08.2009