2009-08-04 18 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; 
      }); 
    }; 

Jak mogę zwrócić wartość do osoby dzwoniącej? Dzięki.jQuery getJSON - Wartość zwracana do funkcji dzwoniącego

EDIT: Próbowałem to:

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

Ale to nie działa albo. Zwraca wartość null.

Odpowiedz

6

Jestem zakładając chcesz użyć synchronicznego zdarzenia tak, że String.prototype.getLanguage function() będzie po prostu powrócić JSON. Niestety nie można tego zrobić z jQuery ze zdalnego interfejsu API.

O ile mi wiadomo, jQuery nie obsługuje synchronous XMLHttpRequest objects, a nawet gdyby tak było, musisz mieć serwer proxy, aby wykonać żądanie synchronizacji, unikając ograniczeń z same-origin policy.

Można jednak robić, co się chce, za pomocą obsługi jQuery dla JSONP. Jeśli wystarczy napisać String.prototype.getLanguage(), aby wspierać callback:

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

Wtedy możemy korzystać z funkcji takich jak:

'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

Dzięki, że to świetny pomysł. –

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); 
}; 
Powiązane problemy